面向对象--继承

1 继承的定义(extends)

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只需继承那个类即可。
多个类可以称为子类,单独这个类称为父类或者超类。

2 继承的使用

必须保证类和类之间有所属关系:is-a关系(xxx是zzz的一种)。
将需要提高复用的代码进行抽取,定义到一个共性类(父类)中,

3 继承的体现

(1)java中只允许单继承,但java中不直接支持多继承。
单继承:一个子类只能够有一个父类
多继承:一个子类可以有多个父类
多继承的好处是可以共享父类的功能。其弊端就是多继承时,当多个父类中有相同的功能时,子级调用父类方法会产生不确定性,java是不会允许这种情况发生。因此java只允许单继承,多继承在java中通过接口的方式来体现。
(2)java允许多重继承
class A{} //爷爷
class B extends A{} //父亲
class C extends B{} //儿子

4 继承中的成员变量

在这里插入图片描述
z.show运行结果是4。
(1)先加载类Test{},其区域有test(){}
(2)main方法进static方法区
(3)执行创建new Zi()。Zi类构造方法有super指向Fu类构造方法,先加载Fu类,其区域有Fu(){}无参构造方法,int num=3,show()方法。在加载Zi类,Zi类区域有Zi(){super();},int num=4,show()方法。
(4)main方法压栈,Zi在堆中创建对象,z=0x0011指向该对象。该对象内部有Zi{}的num和Fu{}的num,默认值为0。Zi{}中构造方法进栈,在调用Fu{}构造方法,在执行Fu{}的内部代码,在执行Zi内部代码。
(5)执行z.show时,优先考虑就近原则。先从自己里面找,没有就去父级找。子级和父级都没有,则编译失败。
堆栈运行图:
在这里插入图片描述
(2)this和super的使用:
在这里插入图片描述
this代表当前类的对象引用
super代表的是父类的内存空间(不代表对象)
(3)
在这里插入图片描述
this可以单独打印输出地址值。而super不同,super必须有使用.或()来调用,不可单独使用。
(1)子类继承父类,会通过子类构造方法中super()来调用父类构造方法,就会继承父类中所有内容。
(2)子类不能够访问父类的私有化成员,也是需要父类提供getset方法在来进行集成使用。

5继承中的成员方法

方法的另一个特性:方法的重写(override),也可以叫覆盖,复写。
可类比于手机的更新换代,功能越来越齐全。在原来的功能需求上进行添加改造就可以。
方法的重载和重写的比较:
重载:发生在一个类中,方法的名字相同,参数列表(个数,类型,顺序)不同,与返回值无关。
重写:发生在父子类中,方法的定义一模一样(返回值类型,方法名,参数列表),但是方法体里面的内容不同。
重写注意事项:
重写的注意事项:
(1)子类重写父类的方法,必须要保证子类权限要大于或者等于父类的权限(public是最大的)。
(2)静态的方法不存在重写,但是可以继承。
因为父类静态方法属于父类,子类静态方法属于子类。
(3)子类重写父类的方法,在方法写法上必须要一模一样。
(4)在子类中方法重写了抽象方法后该方法就变成一般方法。
(5)私有方法和构造方法不能被重写。

6 继承中的构造方法

在这里插入图片描述
子类会继承父类的内容,所以在子类初始化时,必须要先到父类中去执行父类初始化内容,这个就是依靠super来实现的。
在这里插入图片描述
super调用构造方法:
(1)子类构造方法中 super():调用父类的无参构造方法,目的是为了给父类里面的内容进行初始化,给子类进行使用。
(2)当父类中没有空参数的构造方法时,子类的构造方法必须要通过显示的super语句来指定访问的父类中的构造方法。若想调用父类的有参构造方法,就要在super传参。
在这里插入图片描述
注意事项:
(1)当子类的构造方法第一行有写this()的时候,那么默认的super()就没有了?
因为this()和super()都需要定义在构造方法中的第一行。
(2)为什么this()或super()必须要定义在第一行?
因为初始化动作要先执行。
(3)子类的构造方法默认有super(),那么父类的构造方法里面有没有呢?
也是有的,只要是构造方法就一定有super();当我们没有手动的给一个类(父类)去继承的时候,这个类默认是继承了Object类。
(4)什么时候用super调用父类中的构造方法?
只要需要父类指定初始化动作,就在子类中使用super(参数列表)格式调用就可以了。
在这里插入图片描述
继承的好处:
(1)提高了代码的复用性
(2)使得类与类之间产生了联系
继承的弊端:
本来是封装好的内容,但是经过继承,对原有的父类方法进行重写,可能会改变原有的功能,打破了代码的封装性。
Java中解决这个弊端的解决方法:final

7 final(最终化)

类不能够被继承,或者说方法不能够被重写。
final可以修饰类,方法,变量(成员变量,局部变量,静态变量)。
特点:
(1)final修饰的类不可以被继承,是一个最终类(即不能有子类)
(2)fianl修饰的方法是一个最终方法(即不能被子类重写)
(3)final修饰的变量,其值是不能被修改的(就是一个常量).

			//	常量,名字最好是大写
			final int COUNT = 4;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值