java三大特性之一继承
Posted robinson-coding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java三大特性之一继承相关的知识,希望对你有一定的参考价值。
继承
众所周知,java是跨平台,健壮性的语言
他拥有封装,继承,多态三大特性
继承:
首先,子类继承父类之后,子类可以拥有父类的的方法,构造方法不能被继承
使用场景:
如果我们定义好几个类,每个类都拥有相同的方法或者参数,
然后我们就可以抽取相同的内容为父类,然后子类继承父类的参数或者方法,极大的提高了
代码的复用性,减少了我们的工作量
范例:
public class Demo { public static void main(String[] args) { teacher t = new teacher(); t.name = "张三"; t.age = "32"; t.eat(); t.teaching(); Students s = new Students(); s.name = "王二"; s.age = "18"; s.eat(); s.learning(); } } class teacher{ String name; String age; public void eat(){ System.out.println(name + "吃饭"); } public void teaching(){ System.out.println(name + "教书"); } } class Students{ String name; String age; public void eat(){ System.out.println(name +"吃饭"); } public void learning(){ System.out.println(name +"学习"); } }
学生和老师都拥有姓名和年龄,以及吃饭的功能,但是老师特有的方法教书,以及学生特有的方法学习,运行结果如下:
所以呢,我们抽取相同的参数以及方法,然后把代码优化一下
public class Demo { public static void main(String[] args) { teacher t = new teacher(); t.name = "张三"; t.age = "32"; t.eat(); t.teaching(); Students s = new Students(); s.name = "王二"; s.age = "18"; s.eat(); s.learning(); } } class people{ String name; String age; public void eat(){ System.out.println(name + "吃饭"); } } class teacher extends people{ public void teaching(){ System.out.println(name + "教书"); } } class Students extends people{ public void learning(){ System.out.println(name +"学习"); } }
我们抽取了一个父类人,人拥有姓名,年龄,吃饭的属性以及行为,不同职业只需要继承父类人这个父类,便拥有了父类的功能,新增加的功能,教书以及学习特有的方法,直接体现在子类中就可以了,执行结果相同
所以呢,在实际开发者善用分析抽取相同的内容,可以极大的提高了我们的开发效率,减轻我们搬砖的难度
现在我们说一下java继承的限制,java只支持单继承,不支持多继承,一个子类只能继承一个父类,但是可以多层继承,白话就是一个儿子只能认一个爹,不能认多个爹,你爹可以给你在认个爹,也就是你爷爷,再往上太爷爷,祖爷爷
用代码解释一下
class A{ //你太爷爷 } class B extends A{ //你爷爷 } class C extends B{ //你爹 } class D extends C{ //你 }
下面我们说一些方法的重写:
当子类拥有父类一样的方法时,这时候子类不在继承父类的方法,而是子类重写父类的方法
通过重写方法,可以达到增强方法,扩展功能,我们用代码看一下
public class Demo { public static void main(String[] args) { iPhone7 s1 = new iPhone7(); s1.gongnneg(); System.out.println("***************************************"); iPhoneX s2 = new iPhoneX(); s2.gongnneg(); } } class iPhone7{ public void gongnneg(){ System.out.println("打电话"); System.out.println("发短信"); } } class iPhoneX extends iPhone7{ public void gongnneg(){ System.out.println("打电话"); System.out.println("发短信"); System.out.println("上网"); } }
子类通过重新写父类方法,增加了方法,添加了上网功能,同事还保留了打电话,发短信功能
-
最后我们来说一下局部变量,成员变量,父类变量访问的问题
这里需要用到两个关键字,this和super
this:本类的成员
访问本类的成员变量: this.变量名
访问本类的成员方法: this.成员方法名
访问本类的构造方法: this(参数)
注意:
1.用this访问构造方法,this要在第一行,super写出来也要在第一行,所以冲突,一山不容二虎
2.本类的构造方法之间不能相互调用
总结:想在子类中使用父类的成员用super
想使用本类的成员可以使用this
代码展示:
public class Demo { public static void main(String[] args) { demo2 d = new demo2(); d.test(); } } class demo1{ int num = 10; public void test() { System.out.println(num); } } class demo2 extends demo1{ int num = 20; public void test(){ num = 30; System.out.println(num); System.out.println(this.num); System.out.println(super.num); } }
看结果
num 访问方法内部的局部变量
this.num访问本类的成员变量
super访问父类成员变量
以上是关于java三大特性之一继承的主要内容,如果未能解决你的问题,请参考以下文章