继承是Java编程语言的三大特征之一(就是一个很重要的东西)。
想一下我们生活中的继承,比如说张三全部继承了他父亲的留下的50万资产,那张三的资产一定比他的父亲多(假设张三打工多年,自己存了100万),此时张三拥有了150万的资产,也就是说,张三比他的父亲厉害的多(他爸有的都有,没有的他也有)【通过继承,子类可以获得父类的所有功能,并根据需要进行拓展】。
Java编程语言中的继承是对生活的一种模拟,Java中的继承也是一个类似的概念,使用继承主要为了解决代码复用的问题(把一样的代码重复写好几次是一种很愚蠢的做法),当然你也可以选择复制粘贴,不过这将带来一个重要的隐患。
在B类中,我们可以复制A类中 getA() 、getB()、getC()方法,并在里面增添一个getD()方法,这样看起类来并没有什么问题。
不过当有一个方法需要传入一个对象的引用作为参数的时候(就是要用到类中的一个方法)
compare(A a, A,b)
if ( a.getA() > b.getA() ){
return 0;
}
}
问题就出现了,对于compare方法,需要传递进来一个A类型的实例【的引用】(因为要用到A类中的getA()方法),然而B类中也有一个getA()方法,然而B类型的实例【的引用】却不能传入,因为A类和B类是两个完全不同的类。很明显通过复制粘贴这种简单的做法的兼容性不太好(compare()方法需要传递进一个具有getA()方法的对象【的引用】时,这个对象【的引用】只能是通过A类型的实例),很显然这样会降低程序的开发效率。
为了解决上述问题,可以使用Java中类的派生,所谓派生,就是继承已有类的字段和方法等“资产,来创建新的类,另外,派生时不仅可以继承资产,还可以添加、重写字段和方法。使用一句话概括就是:”继承得到的类比原来的功能更加强大”。
上面的案列我们通过继承进行改写,我们想使用继承就需要用到extends关键字,entends关键字在英语中是延申、拓展的意思,因此也可以将继承理解成是对类的拓展
public class Father {int a = 10;int b = 20;int c = 30;public void getA() {System.out.println("这是父类的A方法");}public void getB() {System.out.println("这是父类的B方法");}public void getC() {System.out.println("这是父类的C方法");}}
public class Son extends Father{public void getD(){System.out.println("这是子类中的d方法");}}
注意:
- 子类不能访问父类的私有属性和方法