抽象,接口,转型

抽象类:
有只有方法声明但是没有具体实现的方法的类叫做抽象类
抽象类不去实现行为,行为由子类重写方法来实现
声明:abstract 类名{}
    
    
抽象类和接口的区别:
1.
    
    
注意事项:
    1.只要有抽象方法的类就一定是抽象类
    2.抽象类不一定全部是抽象方法
    3.抽象类不能创建对象,因为创建对象没有意义,但是可以多态
    4.抽象方法只定义声明而没有写具体实现
    5.如果某个类继承了抽象类但是没有把抽象类中的所有抽象方法重写,那么这个类也会变成抽象类,所以也不能创建对象
    6.抽象方法和抽象类用abstract修饰,并且抽象方法一定在抽象类中
    7.抽象类的构造方法不是用来创建对象的,而是用来给子类使用super来给子类对象中的父类对空间中的成员变量赋值的。
    8.注意:没有构造属性的说法

接口:
一切事物都有功能,即一切事物均有接口
    接口不是类,因为创建的时候用的是interface而不是class,但是由于编译后产生的还是.class文件,所以在这点上可以看成是一种只包含了功能声明的特殊类
    接口中定义的方法均是public类型的抽象方法
    接口中无法定义"普通"的成员变量,接口中的所有成员变量都是用final修饰的常量
接口的实现:
    1.接口不可以创建对象(因为它比抽象类还抽象,而且还没有构造方法),用实现(implements)来表示类与接口的关系,格式为 class 类名 implements 接口名{}
    2.实现接口的类会将接口中的抽象方法"继承"过来(因为接口不是类,而继承是类与类之间进行的,所以打了双引号),然后类去实现接口中的抽象方法。接口定义了功能,而实现接口的类实现了接口的功能

class 子类 extends 父类 implements 接口

接口的注意事项:
    1.类单继承类(但是可以多层继承),接口多继承接口(一个接口可以继承多个接口),类多实现接口(一个类可以实现多个接口)
    2.类可以在继承一个类的时候实现多个接口
        class 子类 extends 父类 implements 接口{}
    3.(如果是实现接口的同时继承了别的类)接口与父类的功能可以重复(方法名相同),但是如果重复的话,会调用父类的,如果重写的话,就是重写父类和接口两者的方法

接口中的成员
    1.接口可以定义变量,但是不能定义普通的变量,必须用修饰符 public static final修饰,方法用public abstract修饰(因为接口中的方法都是用public abstract修饰的,所以可以省略掉不写。这个看标准规定)
    2.接口也不能直接创建对象
    3.如果实现类没有重写全部的接口方法,那么这个实现类也会变成一个抽象类

父类共性高度集中
接口>抽象类>父类>子类
2.7

多态的作用:
    如果对象引用的是当前类,那么这个类就不能引用他的子类的东西(本来父类就不能使用子类的方法= =),而是只能用他自己或者他的父类的方法
对象:

多态:
什么是多态:就是用父类的引用指向子类的对象(从左往右)
格式: 父类 引用变量名 = new 子类();
    

父类引用指向子类的对象,这样对象就只能调用父类的方法而不能调用子类的方法,但是调用的方法产生的结果是子类重写后的方法:多态只能使用父类方法,实现的是子类重写后的方法
因为使用的是父类创建的引用,只是将子类的对象赋给了父类对象。父类的对象所以只能使用父类的方法,但是因为子类的对象也指向了该对象,所以该对象既可以看做是父类的对象也可以看做是子类的对象,只是这个时候只能使用父类中的方法而已。因为只能使用父类的方法,所以子类的对象中也只能使用父类的方法,所以使用的要么是父类的方法,要么是子类中重写后的父类的方法。
多态的意义:比如说在方法里传入的参数是父类的引用,在这个方法里,如果使用的是共性的方法,那么就可以使用所有的父类的子类的重写后的方法(或者没有被重写的父类方法),而不是每次都换方法去传递本类的方法,提高了程序的复用性,因为可以使用所有子类重写后的共性方法,所以也提高了当前方法的扩展性(程序的扩展性)

多态的作用只有一个,就是使用被子类重写的方法,除此之外,所有的东西使用的都是父类的,包括静态方法

多态的转型:
    1.向上转型:就是多态
    2.向下转型:就是强制转换
    注意:需要转型的是什么类型,强制转换的就是什么类型,比如Dog类就只能转型为Dog类或者其父类,而不能是其他类
    如果转型错误,编译时不会报错但是运行的时候会报错
    只有多态才有向下转型
    
多态的使用场景:
1.将父类作为泛型,然后用多态去传入子类的对象。比如使用List集合作为泛型,然后传入ArrayList的对象。

posted @ 2018-02-12 21:44  Shuu_丶  阅读(81)  评论(0编辑  收藏  举报