多态: 一般做项目的时候才能体会到多态。
是什么 向上转型
定义:
1.父类引用指向子类对象,形参和实参也会发生多态 多态发生在赋值的时候。
Person p父类=new Pupil()子类;// 父类引用指向子类。
2.缺点:
1.丢失子类属性
1如果父类没有,不管子类有没有,都报错
2如果父类有,但是子类没有,调用父类的
3.如果父类有,子类也有,除成员方法用子类(因为重写),其他都用父类
优点
六字真言 高内聚,低耦合
发生的地方
1.直接写
Person p父类=new Pupil()子类;// 父类引用指向子类。
2.形参和实参 : 形参是父类,实参是子类对象
Pupil p=new Pupil();
xx(p);//父类引用
Middle m-new Middle();
xx(m);
}
public static void xx(Person p//子类对象){
p.sad();
}
3.返回值是子类对象用父类引用接受的也是多态。
1.隐式多态
public class Polymorphic_02
public static void main(string[]args){
Child_01 c1=new Child_01();
c1.m2(;
class Parent{
public void m1(){
System.out.println("父类m1");
public void m2(){
Parent this =new Child_01();//多态的发生
this 其实是一个默认的父类引用数据类型
然后this 又是This 谁调用的指向谁。所以等于
Paren this = new child-01?()
父类的引用 指向 子类对象。
this.m1()
class Child_01 extends Parent{
public void m1(){
System.out.println("子类一o1的m1")
}
子类对象调用没有被覆写的父类的成员方法,此方法内部就是一个多态的环境。
和向下转型。强制转换。
Parent c1=new Child_01();
c1.m2(0i
Child_01 a=(Child_01)c1;//强行转换 (写向装换的类型
)
向上转型是:多态。
instanceof 判断是谁实体化的。
1f(c1 instanceof Child_01){
Child_01 a=(child_01)c1;
a.m1(0;
Felse{
System.out.println("类型有问题");
}
abstract 抽象的关键字 修饰符
定义:
抽象类往往用来表示设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具
体概念的抽象。
比如:动物,它只是一个抽象的概念,并没有一个“东西”叫做“动物”。所以,它并不
能代表一个实体,这种情况下,我们就适合把它定义成抽象类。
1.被abstract 修饰的类叫抽象类。
2.被abstract 修饰的方法叫做抽象方法。
3.abstract不能修饰变量。
5.在抽象类内,可以没有抽象方法(个数0~N),但是抽象方法必须在抽象类和接口里边。
6.与final、private,、static,不能一起使用
抽象方法和抽象类关系
被abstract修饰的类就是用来被继承的。 如果子类没有实现 加 abstract继续顺承下去。
被abstract修饰的方法就是用来被实现/覆写的。
被abstract修饰的类不能创建对象 ,但是有构造方法
接口
定义 语法:权限修饰符implemdnts+接口名{ }
解决问题:弥补Java 单继承的缺点。
1.implemdnts 实现 如果想实现多接口实现中间用,隔开、
2.在接口内所以的变量和常量都是共有的静态是常量. 常量必须是大写的。
3.在接口内静态方法默认公有,成员方法默认抽象。
4.接口内不能有构造方法,不能实例化,不能创建对象。
5.接口的实现了必须实现接口的所有抽象方法,如果没有全部实现,那么该类必须是抽象类。
6.在JDK1.8以后允许出现静态方法和默认方法, 静态方法调用 接口名+方法名 默认方法调用,接口的实现类对象