多态
package cn.itcast.extend; public class ExtendDemo2 { public static void main(String[] args) { A a=new B();//多条 System.out.println(a.num); a.show();//非静态 a.say();//静态方法 } } class A{ int num=10; //静态方法 public static void say(){ System.out.println("父类"+"A"); } //非静态方法 public void show(){ System.out.println("父类"+num); } } class B extends A{ int num=20; //静态方法 public static void say(){ System.out.println("子类"+"B"); } //非静态方法 public void show(){ System.out.println("子类"+num); } }
关于多态:
成员变量:编译看左边,运行看右边
非静态函数:编译看左边,运行看右边
静态函数:编译看左边,运行看右边
解释上述代码:
A a=new B();父类=子类;
a.num调用的是父类的变量.
a.show()调用的是子类的方法
a.say()调用的是父类的。因为静态变量或者静态函数是随着类的加载而加载的.
抽象类
抽象类的特点:
A:抽象类和抽象方法必须用abstract关键字修饰
B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
C:抽象类不能实例化
因为它不是具体的。
抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?
用于子类访问父类数据的初始化
D:抽象的子类a:如果不想重写抽象方法,该子类是一个抽象类。b:重写所有的抽象方法,这个时候子类是一个具体的类。
抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
Animal a = new Cat();
抽象类的成员特点:
成员变量:既可以是变量,也可以是常量。
构造方法:有。
用于子类访问父类数据的初始化。
成员方法:既可以是抽象的,也可以是非抽象的。
抽象类的成员方法特性:
A:抽象方法 强制要求子类做的事情。
B:非抽象方法 子类继承的事情,提高代码复用性。
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
A:可以。
B:不让创建对象。
abstract不能和哪些关键字共存?
private
冲突 定义为抽象就是为了让子类重写,因此不能与private共存
final 冲突 定义为final就不能被子类重写,因此不能与final共存
static
无意义 因为如 public static abstract void show();这样定义可以直接被类名.show()调用,但是没有方法体.因此毫无意义可言!
接口:
接口的特点:
A:接口用关键字interface表示
interface 接口名 {}
B:类实现接口用implements表示
class 类名 implements 接口名 {}
C:接口不能实例化
那么,接口如何实例化呢?
按照多态的方式来实例化。
D:接口的子类
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
接口成员特点
成员变量;只能是常量,并且是静态的。
默认修饰符:public static final
你写不写都有
建议:自己手动给出。
构造方法:接口没有构造方法。
成员方法:只能是抽象方法。
默认修饰符:public abstract 你写不写都有
建议:自己手动给出。
所有的类都默认继承自一个类:Object。
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。
那么既然接口没有构造方法,实现类中中构造方法的super()调用的就是Object这个超类中的构造方法
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
总结:
抽象类和接口的区别:
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
版权声明:本文为博主原创文章,未经博主允许不得转载。