接口+内部类+枚举+注解

接口

接口不能被实例化,也就是 interface A{};不能出现new A();

接口中所有方法是public方法,接口中抽象方法,可以不用abstract修饰,接口里面的修饰符有默认的三个public static final int a = 23;

一个类同时可以实现多个接口,class pig implements IB,IC{}

接口不能继承其他类,但是可以继承多个别的接口。

接口的修饰符只能是public和默认的,这点和类的修饰符一样。

实现接口VS继承类

继承的价值主要在于解决代码的服用性和可维护性。

接口的价值主要在于设计好的各种方法,让其他类去实现这些方法,更加的灵活。

当子类继承了父类就自动拥有父类的功能,如果子类需要扩展功能,可以通过实现接口的方式扩展,可以理解为实现接口是对java单继承的一种补充。

内部类

一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类,嵌套的其他类称为外部类。内部类的最大特点是可以直接访问私有属性,并且可以体现类与类间的包含关系。基本语法:class Outer{        //外部类

                                class Inner{        //内部类

                                        

                                }

                        }

class Other{//外部其他类}

类的五大成员:属性、方法、构造器、代码块、内部类

定义在外部类局部位置上(比如方法内):1)局部内部类(有类名)        2)匿名内部类(没有类名),匿名内部类即是一个类的定义,同时它本身也是一个对象。调用方法:

new A(){

        @override

        public void cry(){

                sout;

}

}.cry();

A a = new A(){

        @override

        public void cry(){

                sout;

};

a.cry();

}

定义在外部类的成员位置上:1)成员内部类(没用static修饰)        2)静态内部类(使用static修饰)

(1)局部内部类定义在方法中(2)作用域在方法体或者代码块中(3)本质仍然是一个类

package InnerClass;

public class InnerClassExercise02 {
    public static void main(String[] args) {
        CellPhone cellPhone = new CellPhone();
        cellPhone.alarmclock(new Bell(){
            @Override
            public void ring() {
                System.out.println("起床了~");
            }
        });

        cellPhone.alarmclock(new Bell() {
            @Override
            public void ring() {
                System.out.println("上课了~");
            }
        });
    }
}

interface Bell{
    void ring();//方法
}

class CellPhone{
    public void alarmclock(Bell bell){
        bell.ring();
    }
}

 

输出结果为5  5

枚举类

把具体的对象一个一个列举出来的类称为枚举类。一般不需要提供set方法,因为枚举类对象通常为只读,对枚举对象使用final+static共同修饰,实现底层优化。枚举对象名通常使用全部大写,枚举对象也可以有多个属性。

package com.edu.enum_;


public class Enumeration01 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
    }
}
//演示定义枚举实现
class Season{
    private String name;
    private String desc;
    //定义了四个对象
    public static Season SPRING = new Season("春天","温暖");
    public static Season WINNER = new Season("冬天","寒冷");
    public static Season SUMMER = new Season("夏天","炎热");
    public static Season AUTUMN = new Season("秋天","凉爽");

    //1.将构造器私有化,目的防止直接new
    //2.去掉set相关方法,防止属性被修改
    //3.在season内部直接创建固定的对象
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }

}

enum自动调用父类的toString方法。

增强for循环:依次从数组中取出数据赋给循环变量,如果去除完毕则退出for。

valueof:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常。

compareTo:比较两个枚举常量,比较的就是编号

package com.edu.enum_;

public class EnumExercise02 {
    public static void main(String[] args) {
        Week[] weeks = Week.values();
        System.out.println("====所有星期的信息如下====");
        for(Week week:weeks){
            System.out.print(week);
        }
    }
}
enum Week{
    MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期四"),
    FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");
    private String detail;

    private Week(String detail) {
        this.detail = detail;
    }

    public String getDetail() {
        return detail;
    }

    @Override
    public String toString() {
        return detail+"\n";
    }
}

枚举类不能继承或被继承,但是还是可以实现接口的。

注解

也称为元数据,用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。

@SuppressWarnings({"all"}),SuppressWarnings可以用来抑制警告出现。

元注解的种类:1)Retention只能修饰一个Annotation,用于指定可以保留多长时间。

作业

输出结果为:9.0 red        100.0 red。        static对象只会在加载的时候执行一次

package com.edu.enum_;

public class Homework02 {
    public static void main(String[] args) {

    }
}
class Frock{
    private static int currentNum = 100000;
    private int serialNumber;

    public Frock() {
        this.serialNumber = getNextNum();
    }

    public int getSerialNumber() {
        return serialNumber;
    }

    public static int getNextNum(){
        currentNum += 100;
        return currentNum;
    }


}
class TsetFrock {
    public static void main(String[] args) {
//        System.out.println(Frock.getNextNum());
//        System.out.println(Frock.getNextNum());
        Frock frock = new Frock();
        Frock frock1 = new Frock();
        Frock frock2 = new Frock();
        System.out.println(frock.getSerialNumber());
        System.out.println(frock1.getSerialNumber());
        System.out.println(frock2.getSerialNumber());
    }
}

package com.edu.enum_;

public class Homewok03 {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.shout();
        Animal dog = new Dog();
        dog.shout();
    }
}
abstract class Animal{
    public abstract void shout();

}
class Cat extends Animal{
    @Override
    public void shout() {
        System.out.println("猫会喵喵叫~");
    }
}
class Dog extends Animal{
    @Override
    public void shout() {
        System.out.println("狗会汪汪叫~");
    }
}

package com.edu.enum_;

/**
 * @author JQY
 * @version 1.0
 */
public class Homework04 {
    public static void main(String[] args) {
        Cellphone cellphone = new Cellphone();
        cellphone.testWork(new Cal() {
            @Override
            public double work(double n1, double n2) {
                return n1+n2;
            }
        },10,8);
    }
}
interface Cal{//该方法在匿名内部类完成
    public double work(double n1,double n2);
}
class Cellphone{
    public void testWork(Cal cal,double n1,double n2){
        double result = cal.work(n1,n2);
        System.out.println("计算后的结果是="+result);
    }
}

package com.edu.enum_;

/**
 * @author JQY
 * @version 1.0
 */
public class Homework05 {
    public static void main(String[] args) {
        new A().f1();
    }
}
class A{
    public void f1(){

        class B{
            private final String name = "Tom";
            public void show(){
                System.out.println("name"+name);
            }
        }
        B b = new B();
        b.show();
    }
}

如果A类里也有一个同名的name,则可以用A.this.name来调用。

package com.edu.enum_;

/**
 * @author JQY
 * @version 1.0
 */
public class Homework06 {
    public static void main(String[] args) {
        Person tang = new Person("唐僧",new Horse());
        tang.common();
        tang.passRiver();
    }
}

interface Vehicles{
    public void work();
}

class Horse implements Vehicles{
    @Override
    public void work() {
        System.out.println("一般情况下 使用马儿前进");
    }
}
class Boat implements Vehicles{
    @Override
    public void work() {
        System.out.println("过河的时候 使用小船前进");
    }
}

class vehiFacity{
    //将方法做成static,这样比较方便
    public static Horse getHorse(){
        return new Horse();
    }
    public static Boat getBoat(){
        return new Boat();
    }
}

class Person{
    private String name;
    private Vehicles vehicles;

    public Person(String name, Vehicles vehicles) {
        this.name = name;
        this.vehicles = vehicles;
    }

    //把具体要求封装成方法
    public void passRiver(){

        if(!(vehicles instanceof Boat)){
            vehicles = vehiFacity.getBoat();
        }
        vehicles.work();
    }

    public void common(){
        if(!(vehicles instanceof Horse)){
            vehicles = vehiFacity.getHorse();
        }
        vehicles.work();
    }
}

package com.edu.enum_;

/**
 * @author JQY
 * @version 1.0
 */
public class Homework07 {
    public static void main(String[] args) {
        Car car = new Car(20);
        Car car1 = new Car(50);
        Car car2 = new Car(-1);
        car.getAir().flow();
        car1.getAir().flow();
        car2.getAir().flow();

    }
}
class Car{
    private double temperature;
    class Air{
        public void flow(){
            if(temperature>40){
                System.out.println(" 温度大于40 吹冷气");
            }else if(temperature<0){
                System.out.println(" 温度小于0度吹热气");
            }else{
                System.out.println(" 温度正常,关闭空调");
            }
        }
    }

    public Car(double temperature) {
        this.temperature = temperature;
    }

    public Air getAir(){
        return new Air();
    }
}

可以通过public Air getAir(){

return new Air();

}获得成员内部类

package com.edu.enum_;

/**
 * @author JQY
 * @version 1.0
 */
public class Homework08 {
    public static void main(String[] args) {
        Color green = Color.GREEN;
        green.show();

        switch (green){
            case YELLOW:
                System.out.println("匹配到黄色");
            case BLACK:
                System.out.println("匹配到黑色");
            case RED:
                System.out.println("匹配到红色");
            case BLUE:
                System.out.println("匹配到蓝色");
            case GREEN:
                System.out.println("匹配到绿色");
        }

    }
}
interface IA{
    public void show();
}
enum Color implements IA{
    RED(250,0,0),BLUE(0,0,255),
    BLACK(0,0,0),YELLOW(255,255,0),
    GREEN(0,255,0);
    private int redValue;
    private int greenValue;
    private int buleValue;

    Color(int redValue, int greenValue, int buleValue) {
        this.redValue = redValue;
        this.greenValue = greenValue;
        this.buleValue = buleValue;
    }


    @Override
    public void show() {
        System.out.println("属性值为:"+redValue+","+greenValue+","
        +buleValue);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值