一.继承:
1.多个类有共同的成员变量和成员方法, 抽取到一个另外的一个类中,
在让多个类去继承这个父类 ,我们的多个类就可以获取到父类的成员变量和成员方法了
2.使用 extends 关键字
3.格式:class 子类名 extends 父类名{ }
4.java中语言继承的特点
a.单一继承,只能继承一个父类(只能有一个亲爹)
b.不支持多继承:有些语言比如c++就可以继承多个父类
c.支持多层继承:就是 继承爸爸,还可以有个爷爷
d.子类只能获取父类的非私有成员( 非private)
5.就近原则
谁离我近就用谁
1)如果有局部变量就使用局部变量
2)如果没有局部变量,就使用子类的成员变量
3)如果没有局部,子类成员变量,就使用父类的成员变量
6.super:
可以获取父类的成员变量,成员方法,用法和this相似
7.继承中的成员方法的特点---重写 override
子类中没有这个方法,调用父类的
子类中重写了这个方法,调用子类的
方法的重写:在子父类当中(继承关系中),子类的方法和父类的完全一样,子类重写父类的方法(覆盖)
区分:方法的重载,在一个类中 多个重名的方法,参数列表不一致
8.方法重写的应用场景:当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法,并可以在方法中使用关键字super调用父类的方法,这样既有父类的功能,也有子类的特有功能
9.方法重写的注意事项:
不能重写父类私有的方法
权限修饰不小于父类的
注解: @ Override
10.this()和super()执行顺序
特点:只能在构造方法的第一行出现
两者只能调用其中一个
子类方法中至少有一个去调用父类的构造方法
11.继承的优缺点
优点:1.提高了代码的复用性
2.提高了代码的可维护性
缺点:1.类的耦合性增强了
开发原则:高内聚,低耦合
二.匿名对象
没有变量引用的对象(没有名字的对象)
应用场景:
当方法只调用一次的时候可以使用匿名对象
注意:用匿名对象给属性赋值没有什么意义
三.final 关键字
final 修饰符,可以用于修饰类,方法,变量
final所修饰的类:不能被继承,不能有子类
final所修饰的方法:不能被重写
final所修饰的变量:不能改变,常量
常量:
字面值常量:1,2,3
自定义常量:被final所修饰的成员变量,一旦初始化不能被改变
注意:自定义常量必须初始化,可以选择显示初始化,或者构造初始化,或者使用静态代码块
命名规则:字母全部大写,不同单词用下划线"_"隔开
四.抽象类
abstract 抽象类:用于修饰方法和类
抽象方法:只有方法的声明,但是没有方法体的方法
抽象类:有抽象方法的类必须是抽象类
注意:一个类继承抽象类,需要重写所有的父类的抽象方法,抽象类则不用重写
抽象类的特点:
1.抽象方法只能在抽象类里面
2.抽象类和抽象方法必须用abstract来修饰
3.抽象类不能实例化
4.抽象类中可以有非抽象的方法
5.抽象类和类的关系也是继承
6.一个类继承抽象类,要么重写抽象类的所有抽象方法,要么他是一个抽象类
abstract和关键字final,private不可以共存
如果不想让一个类 实例化,可以用private和abstract来修饰
抽象的思想
Reader和Writer
起到了规范的作用
day03
一.接口 interface
1.接口是一个比抽象类还抽象的类,接口里全是抽象方法,接口和类时实现(implements)的关系
2.格式: 权限修饰符 interface 接口名 { }
3.作用:
a.为实现类扩展出接口具有的功能
b.弥补java只能单继承的局限性,抽象类只能单继承,而接口可以多实现
4.实现接口:
implements 关键字
格式 权限修饰符 class 类名 implements 接口1,接口2...{ }
5.注意:
1.所有方法都是抽象方法
2.接口不能创建对象
3.接口没有构造器
4.接口默认使用public和abstract修饰方法
5.只能使用public和abstract修饰
6.建议以后手动添加修饰符
7.接口中只有常量 (默认是pulbic static final修饰)
------------------------------------
public static final int NUM=10; //正确
static final int NUM1=10; //正确
final int NUM2=10; //正确
int NUM3=10; //正确
-------------------------------------
public abstract void method(); //正确
abstract void method(); //正确
void method(); //正确
public static abstract void method();//错误
-------------------------------------
6.类与类的关系:继承,单一继承,多层继承
类与接口的关系:实现,多实现
接口与接口的关系:继承,可以多继承
提问:
1.继承只有都是单一继承,多层继承吗 答案:不是 接口可以多继承
2.抽象类的子类必须要实现所有的抽象方法吗 答案 不是 子类是抽象类可以不用
7.接口的优点
a.弥补java只能单继承的局限性,抽象类只能单继承,而接口可以多实现
b.对外提供规范(电脑usb接口)
c.降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高开发效率)
8.接口和抽象类的区别
共性: 不断的抽取,抽取抽象的概念
区别:
1.与类的关系
类与接口是实现关系,而且是多实现,一个类可以实现多个接口
类与抽象类之间是继承关系,而且是单一继承,一个类只能有一个父类,可以多层继承
2. 成员
a)成员变量:
抽象类.可以有成员变量,也可以有常量
接口,只能有常量
b)成员方法:
抽象类,可以有抽象方法,也可以有非抽象方法
接口,全部是抽象方法
c)构造方法:
接口类,可以有构造方法
接口,无构造方法
9.什么时候使用接口 ,什么时候用抽象类
接口,扩展功能(猫学会了游泳) 游泳是接口
抽象类,共性抽取(猫是动物) 动物是抽象类
举例而已,别较真~
10.乒乓球,篮球运动员 案例 略.
二.多态
1.多态的前提:
a.字符类的继承关系,或者实现关系
b.方法的重写
c.父类的引用指向子类 //Animal a=new Dog();
动态绑定:运行期间调用的方法,是根据具体的类型
2.多态成员的特点
a.成员变量---编译看左边,运行看左边
b.静态方法---编译看左边,运行看左边
c.成员方法---编译看左边,运行看右边
3.向上转型,向下转型
子类型转换为父类型(向上)
父类型转子类型(向下)
引用类型之间的转换
--------------
Animal a=new Dog();//向上转型
Dog d=(Dog)a;//向下转型
---------------
基本数据类型的转换
由小到大 自动转型
byte,short,char-->int-->long-->float-->double
由大到小 强制转换
4.多态的优缺点
多态的优缺点:
优点:可以提高可维护性(多态前提所保证的),提高代码的可扩展性
缺点:无法直接访问子类特有的成员
5.扩展
a. instanceof 判断某个类是不是一个这个类的对象(返回值是boolean)
if(p instanceof Phone){
}
b.实现多个接口,和类不能有相同的属性和方法