【继承与多态】
继承关键字【extends】
例如:Cat就继承了Animal类
class Animal{}
class Cat extends Animal{}
【继承概述】
多个类中存在相同属性行为时,将这些内同抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类就行。
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名{}
单独的这个类称为父类,基类或者超类;这个类可以称为子类或者派生类。
有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员。
【继承的好处】
a:提高了代码的复用性
b:提高了代码的维护性
c:让类和类之间产生了关系,是多态的前提
【继承的弊端】
类的耦合性增强了,---藕断丝连紧密型高
开发的原则:高内聚,低耦合。
内聚:就是自己完成某件事情的能力。
【继承的特点】
单继承:
一个子类只能继承一个父类,一个父类可以有多个子类
多继承:子类还可有子类
在java中,一般普通类都是继承了Object类了。Object是顶级父类
注意:
1.父类私有的方法,子类无法继承。
2.构造方法不能继承。
3.使用继承的情况,满足一种关系
子类 is a f父类
【继承关系中的成员变量】
不同名字:个属于各自的
相同名字:子类对象使用的是自己的。
在子类中,要想访问父类的成员变量可以使用super关键字
访问成员变量
this.成员变量 super.成员变量
访问构造方法
this(...) super.(...)
访问成员方法
this.成员方法() super.成员方法()
例如:----------------------------------------------------------------------
class A{
int a=1;
}
class B extends A{
int a=2;
B(){}
public void jishuan(){
int a=3;
System.out.println(a); //a=3;
System.out.println(this.a); //a=2;
System.out.println(super.a); //a=1;
}
}
------------------------------------------------------------------------------------
注意:在创建子类对象时,会默认访问父类的无参数的构造方法。
因为在子类实例化时系统会默认在子类的无参构造方法最前面加上super();来调用一次父类的成员构造方法。
这样第一是为了初始化父类来让子类继承。
在调有参数的构造方法也是一样,同样会先调用一次父类无参的构造方法
父类的构造方法只能调用一次,并且要在子类的构造方法中调用。这一次调用中可以选择调用子类的无参构造和有参构造。
当父类属性被私有化,子类要调用该产生可以使用【super.参数】
当父类没有无参构造,子类可以直接调用父类的有参够着来避免错误,或者
调用子类的有参构造,但是你的子类有参必须访问父类有参才可以。this(参数)
super和this当调用构造函数时必须是子类构造函数的第一句
super的功能只是提供给子类访问父类中的公用方法。而静态方法本身就可以使用父类名称调用,或者子类名称调用
对于子类中重写了父类 的公用方法,也可以在子类重载的公用方法中使用super调用父类的公用方法
再方法重写中,1.父类私有的方法不能被重写,也无从查看。也五法继承。
2.子类重写父类方法中,权限不能更低。即,原来公有的权限不能再重写后改为私有的。
3.如果父类是静态方法,子类必须通过静态方法去重写。(相当于属于该子类的静态方法)
【成员方法的重写】
子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。
使用特点:
如果方法名不同,就调用对应的方法
如果方法名相同,就最终使用的是子类自己的
方法重写的应用:
当子类中需要父类的功能,而功能主体子类有自己特有内容时,可以重新写父类中的方法,这样,即继承了父类的功能,又定义了子类特有的内容。
【多态】
1.要么继承(类与类)/要么实现(类与接口)
2.方法重写(不是必须,但是你不重写,没有意义)
3.父类引用指向子类对象(必须)
多态概述
某一个事物,在不同时刻表现出来的不同状态。
多态前提和体现
有继承关系
有方法重写
有父类引用指向子类对象
多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)
多态的弊端
不能使用子类特有的功能(子类有,而父类中没有的方法)
-------------------------------------------------------
父类引用子类对象
Fu f=new Zi();
成员变量:
编译看左边,运行看左边
成员方法:
编译看左边,运行看右边
构造方法:
编译看左边,运行看左边
继承关键字【extends】
例如:Cat就继承了Animal类
class Animal{}
class Cat extends Animal{}
【继承概述】
多个类中存在相同属性行为时,将这些内同抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类就行。
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名{}
单独的这个类称为父类,基类或者超类;这个类可以称为子类或者派生类。
有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员。
【继承的好处】
a:提高了代码的复用性
b:提高了代码的维护性
c:让类和类之间产生了关系,是多态的前提
【继承的弊端】
类的耦合性增强了,---藕断丝连紧密型高
开发的原则:高内聚,低耦合。
内聚:就是自己完成某件事情的能力。
【继承的特点】
单继承:
一个子类只能继承一个父类,一个父类可以有多个子类
多继承:子类还可有子类
在java中,一般普通类都是继承了Object类了。Object是顶级父类
注意:
1.父类私有的方法,子类无法继承。
2.构造方法不能继承。
3.使用继承的情况,满足一种关系
子类 is a f父类
【继承关系中的成员变量】
不同名字:个属于各自的
相同名字:子类对象使用的是自己的。
在子类中,要想访问父类的成员变量可以使用super关键字
访问成员变量
this.成员变量 super.成员变量
访问构造方法
this(...) super.(...)
访问成员方法
this.成员方法() super.成员方法()
例如:----------------------------------------------------------------------
class A{
int a=1;
}
class B extends A{
int a=2;
B(){}
public void jishuan(){
int a=3;
System.out.println(a); //a=3;
System.out.println(this.a); //a=2;
System.out.println(super.a); //a=1;
}
}
------------------------------------------------------------------------------------
注意:在创建子类对象时,会默认访问父类的无参数的构造方法。
因为在子类实例化时系统会默认在子类的无参构造方法最前面加上super();来调用一次父类的成员构造方法。
这样第一是为了初始化父类来让子类继承。
在调有参数的构造方法也是一样,同样会先调用一次父类无参的构造方法
父类的构造方法只能调用一次,并且要在子类的构造方法中调用。这一次调用中可以选择调用子类的无参构造和有参构造。
当父类属性被私有化,子类要调用该产生可以使用【super.参数】
当父类没有无参构造,子类可以直接调用父类的有参够着来避免错误,或者
调用子类的有参构造,但是你的子类有参必须访问父类有参才可以。this(参数)
super和this当调用构造函数时必须是子类构造函数的第一句
super的功能只是提供给子类访问父类中的公用方法。而静态方法本身就可以使用父类名称调用,或者子类名称调用
对于子类中重写了父类 的公用方法,也可以在子类重载的公用方法中使用super调用父类的公用方法
再方法重写中,1.父类私有的方法不能被重写,也无从查看。也五法继承。
2.子类重写父类方法中,权限不能更低。即,原来公有的权限不能再重写后改为私有的。
3.如果父类是静态方法,子类必须通过静态方法去重写。(相当于属于该子类的静态方法)
【成员方法的重写】
子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。
使用特点:
如果方法名不同,就调用对应的方法
如果方法名相同,就最终使用的是子类自己的
方法重写的应用:
当子类中需要父类的功能,而功能主体子类有自己特有内容时,可以重新写父类中的方法,这样,即继承了父类的功能,又定义了子类特有的内容。
【多态】
1.要么继承(类与类)/要么实现(类与接口)
2.方法重写(不是必须,但是你不重写,没有意义)
3.父类引用指向子类对象(必须)
多态概述
某一个事物,在不同时刻表现出来的不同状态。
多态前提和体现
有继承关系
有方法重写
有父类引用指向子类对象
多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)
多态的弊端
不能使用子类特有的功能(子类有,而父类中没有的方法)
-------------------------------------------------------
父类引用子类对象
Fu f=new Zi();
成员变量:
编译看左边,运行看左边
成员方法:
编译看左边,运行看右边
构造方法:
编译看左边,运行看左边