java三大特性
封装:将不需要对外提供的内容都隐藏起来,把属性隐藏,提供公共方法对其访问,提高代码安全性与复用性,使用private修饰类的属性,提供getter/setter方法供外部访问类的属性
继承:extends,多个类有共同的成员变量和成员方法,抽取导另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取到父类中的非私有成员变量与重写非私有成员方法
特点:支持单一继承与多级继承,不支持多继承
继承中成员变量的特点:子类只能获取非私有属性
子父类中成员变量名字不一样,直接获取父类的成员变量
子父类中成员变量名字一样,直接获取子类的成员变量
super获取父类的成员变量与成员方法,与this用法相似
继承中的构造方法执行顺序:创建子类的对象,调用子类的构造方法,如果子类的第一行代码没有调用父类的构造方法,则会默认调用父类的无参构造,我们可以使用super(参数)来调用父类的其他的构造方法
this与super的区别:
this:当前对象的引用
调用子类的成员变量和成员方法
在子类的构造方法第一行调用子类其他构造方法,放到其他会报错
super:子类对象的父类引用
调用父类的成员变量和成员方法
在子类的第一行调用父类的构造方法,放到其他行会报错
继承的优点:提高代码的复用与可维护性
继承的缺点:类的耦合性增强了
开发的原则:高内聚低耦合
内聚:就是自己弯沉给某件事情的能力
耦合:类与类的关系
抽象类:
abstract关键字,用于修饰方法和类,抽象类里面可以有非抽象方法,不能与final,private共用
抽象方法:不同跟类的方法是相似,单是具体内容又不太一样,所有我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法。
注意:一个类继承了抽象类,一定要重写他所有的抽象方法,否则这个类就得是抽象类
特点:抽象方法只能在抽象类里面
抽象类和抽象方法必须被abstract修饰
抽象类不能实例化对象
抽象类中可以有非抽象方法
抽象类和类的关系也是继承
一个类继承了抽象类,要么重写所有的抽象方法,要么他自己也是抽象类
成员特点:可以有成员变量
可以有常量
可以有抽象方法
可以有非抽象方法
可以有构造方法
接口:interface,接口是一个比抽象类还抽象的类,接口里所有的方法全是抽象方法,用于解决继承单一的局限性
格式: interface 接口名{ }
注意:接口不能实例化
成员特点:只有抽象方法
只能有常量
默认并只能使用public或者abstract修饰方法
默认使用public static final来修饰成员变量
一个类实现一个接口,implements关键字,要么重写所有抽象方法,要么是抽象类
接口特点:接口之间可以多继承,多层继承,不能实现
优点:对外提供规则,降低程序的耦合性
接口和抽象类的区别
共性:不断抽取,抽取出抽象的概念
区别1:与类的关系
类与接口是实现关系,而且是多实现,一个类可以实现多个接口
类与抽象类是继承关系,Java中继承是单一继承,一个类只能有一个父类
区别2:成员
抽象类可以有成员变量,也可以有常量
接口只能有常量
抽象类可以有抽象方法,可以有非抽象方法
接口只能由抽象方法,而方法由默认修饰符public或者abstract
抽象类有构造方法,接口没有构造方法
多态:
多态的前提:
字符类的继承关系
方法的重写
父类调用指向子类对象 Animal a = new Cat();
动态绑定:在运行期间,运行期间调用的方法,是根据其具体的类型
多态的成员特点
成员变量:编译时看的是左边(父类),运行时也是看左边(父类)
成员方法:编译时看的是左边(父类),运行时是看右边(子类)
静态方法:编译的看的是左边(父类),运行时看的时左边(父类)
使用变量去调用静态方法,其实相当于用变量类型的类名去调用
多态的向上转型和向下转型:
引用类型之间的转换
向上转型
由小到大(子类型转换成父类型)
Animal a = new Dog();
只能调用父类有的方法,不能调用子类特有的方法
向下转型,本身是什么类型,才能转那种类型,不能乱转
由大到小
Dog d = (Dog)a;
基本数据之间的转换
自动类型转换:由小到大 byte short char int long float double
强制类型 转换:由大到小
多态的缺点:
无法直接访问子类特有的成员
多态的优点:
可以提高可维护性(多态前提所保证),提高代码的可扩展性,传递参数的时候可以直接传动父类引用。