105
社区成员




1) 抽象类不能被实例化
2)抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法
3)一旦类包含了abstract方法,则这个类必须声明为abstract
4) abstract 只能修饰类和方法,不能修饰属性和其它的
5)抽象类使用的注意事项和细节讨论,抽象类可以有任意成员【抽象类本质还是类】,比如:非抽象方法、构造器、静态属性等等
7)如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。
6)抽象方法不能有主体,即不能实现.如图所示
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
1)接口不能被实例化
2)接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰图示:
3)一个普通类实现接口,就必须将该接口的所有方法都实现。
4)抽象类实现接口,可以不用实现接口的方法。
5)一个类同时可以实现多个接口
6)接口中的属性,只能是final的,而且是 public static final 修饰符。
比如:int a=1;实际上是 public static final int a=1;(必须初始化)
7)接口中属性的访问形式:接口名.属性名
8)接口不能继承其它的类,但是可以继承多个别的接口
[举例] interface A extends B,C{}
9)接口的修饰符只能是public和默认,这点和类的修饰符是一样的。
当子类继承了父类,就自动的拥有父类的功能 // 如果子类需要扩展功能,可以通过实现接口的方式扩展. // 可以理解 实现接口 是 对 java 单继承机制的一种补充
接口的多态特性
在前面的Usb接口案例,UsbInterface usb,既可以接收手机对象,又可以接收相机对象,
就体现了接口多态(接口引用可以指向实现了接口的类的对象)
演示一个案例:
给Usb数组中,存放Phone和相机对象,Phone类还有一个特有的方法call(),请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone特有方法call.
接口存在多态传递现象.
如果定义类在局部位置(方法中/代码块) : (1)局部内部类 (2) 匿名内部类
定义在成员位置 (1) 成员内部类 (2) 静态内部类
基本介绍
基本语法
内部类的分类
定义在外部类局部位置上(比如方法内)
1)局部内部类(有类名)
2)匿名内部类(没有类名,重点!!!!)
>定义在外部类的成员位置上:
1)成员内部类(没用static修饰)
2)静态内部类(使用static修饰)
局部内部类的使用
说明:局部内部类是定义在外部类的局部位置,比如方法中,并且有类名
访问方式:创建对象,再访问(注意:必须在作用域内)
记住: (1)局部内部类定义在方法中/代码块
(2)作用域在方法体或者代码块中
(3)本质仍然是一个类
6. 外部其他类--不能访问---->局部内部类(因为局部内部类地位是一个局部变量)
7. 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问【演示】
System.out.printIn("外部类的n2=" +外部类名.this.n2);
(1)本质是类
(2)内部类
(3)该类没有名字
(4)同时还是一个对象
说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名
匿名内部类的基本语法
说明:成员内部类是定义在外部类的成员位置,并且没有static修饰。
1.可以直接访问外部类的所有成员,包含私有的
2.可以添加任意访问修饰符(public、protected、默认、private)因为它的地位就是一个成员。
3.作用域和外部类的其他成员一样,为整个类体比如前面,在外部类的成员方法中创建成员内部类对象,再调用方法
4.成员内部类--访问-->外部类成员(比如:属性)[访问方式:直接访问]
5.外部类--访问--->成员内部类(说明)访问方式:创建对象,再访问
6.外部其他类--访问-->成员内部类
7.如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问
说明:静态内部类是定义在外部类的成员位置,并且有static修饰
小结:进行自定义类实现枚举,有如下特点:
1)当我们使用enum关键字开发一个枚举类时 默认会继承 Enum 类, 而且是一个 final 类
2) 传统的 public static final Season2 SPRING = new Season2("春天", "温暖");
简化成 SPRING("春天", "温暖"), 这里必 须知道,它调用的是哪个构造器.
3) 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略
4)当有多个枚举对象时,使用,间隔,最后有一个分号结尾
5) 枚举对象必须放在枚举类的行首.
1) toString:Enum 类已经重写过了,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息
2) name:返回当前对象名(常量名),子类中不能重写
3) ordinal:返回当前对象的位置号,默认从 0 开始
4) values:返回当前枚举类中所有的常量
5) valueOf:将字符串转换成枚举对象,要求字符串必须 为已有的常量名,否则报异常!
6) compareTo:比较两个枚举常量,比较的就是编号!