一.抽象类
1.抽象方法:由abstract修饰;只有方法名,没有方法体;解决父类方法的不确定性;
2.抽象类: 由abstract修饰;包含抽象方法的类必是抽象类;抽象类不一定有抽象方法;
3.抽象类不能被实例化;需要被继承;子类也可为抽象类;子类要重写父类所有抽象方法;
4.abstract和final不能同时使用
二.抽象接口
1.接口中只能包含常量和抽象方法;接口不能实例化;interface定义; implements实现;
2.子类实现接口,必须重写所有抽象方法;一个类可以实现多个接口用”,”隔开;
3.接口和父类同时存在时,要先继承再实现接口; 接口与接口之间可以继承;
4.引用什么看类型;
三.多态(属性不具备多态)
1.意义:(1)一个类型的引用在指向不同的对象时有不同的实现;
People p1=newStudent();
p1.work();//学习
p1.name;调用People的name属性
People p2=new Teacher();
p2.work();//授课
p2.name;调用People的name属性
(2)同样一个对象造型成不同类型时,会有不同功能;
People p=new People();
Student student=p; student.study();
Teacher teacher=p; teacher.teacher();
2.可以向上造型的类型:
(1)父类的类型
(2)其实现的接口类型
3.强制转型:大类型到小类型必须强转(成功与否看对象)
前提:(1)变量指向的对象确实是该子类类型;
(2)变量指向的对象确实实现了该接口;
在强制转型中,可以通过instanceof判断某个引用指向的对象是否为指定类型(返回boolean类型)
四.内部类
1.一个类可以定义在另一个类的内部,内部的类称为Inner,所在类为Outer;
2.Inner定义在Outer内部,只服务于Outer,对外部不具备可见性,Inner可以直接调用Outer的成员和方法(包括私有);内部类通常只在外部类中被创建(构造或其他方法);
3.匿名内部类:如果需要创建一个类的对象,而对象创建后,类的价值不存在了,该类不需要命名
例:interface Info{ 成员 }
class Outer{
main(){
Info o=new Info();//错误,接口不能实例化
Info o=new Info(){成员};//正确,创建接口的实现类对象,实现类省略
(匿名类实现的接口或继承的父类)
}
}