面向对象的三大特征:封装,继承,多态。*
继承是Java中一般到特殊的关系,是一种子类到父类的关系。
例如:学生类继承了人类。 猫类继承了动物类。
被继承的类称为:父类/超类。
继承父类的类称为:子类。
**继承的作用?**
“可以提高代码的复用”,相同代码可以定义在父类中。
然后子类直接继承父类,就可以直接使用父类的这些代码了。
(相同代码重复利用)
子类继承了父类,子类就得到了父类的属性和行为。
"继承提高了代码的复用性!"
子类更强大:子类不仅得到了父类的功能,它还有自己的功能。
**继承的特点:**
子类继承了一个父类,子类就可以直接得到父类的属性(成员变量)和行为(方法)了。
**继承的格式:**
子类 extends 父类{
}
**小结:**
**继承是子类到父类的一种关系。
继承的关键字:extends
子类继承父类:子类就可以直接得到父类的属性(成员变量)和行为(方法)了。
子类更强大!
继承的作用:提高了代码的复用性,相同代码定义在父类中,子类可以直接继承使用。**
**public class ExtendsDemo {
public static void main(String[] args) {
Cat dlam = new Cat();
dlam.run();
}
}
class Cat extends Animal{
}
class Animal{
public void run(){
System.out.println("动物跑的贼快~~~");
}
}**
问题:
如果直接定义类会出现大量相同属性相同行为的重复代码。
企业开发中不允许太多冗余代码。
解决思路:
把相同的属性和行为定义在一个父类中,然后让子类继承即可。
引入:
子类继承父类,子类就得到了父类的属性和行为。
但是并非所有父类的属性和行为等子类都可以继承。
子类不能继承父类的东西:
子类不能继承父类的构造器:子类有自己的构造器。(没有争议的)
有争议的观点(拓展):
1、子类是否可以继承父类的私有成员(私有成员方法,私有成员变量):
– 我认为子类是可以继承父类的私有成员的,只是不能直接访问而已!!
2、子类是否可以继承父类的静态成员(静态方法,静态成员变量)
– 我认为子类是不能继承父类的静态成员的。子类只是可以共享父类的静态成员,共享并非继承!
方法重写的概念:
子类继承了父类,子类就得到了父类的某个方法
但是子类觉得父类的这个方法不好用或者无法满足自己的需求
子类重写一个与父类申明一样的方法来覆盖父类的该方法,子类的这个方法
就进行了方法重写。
方法重写的校验注解: @Override
Java建议在重写的方法上面加上一个@Override注解。
方法一旦加了这个注解,那就必须是成功重写父类的方法,否则报错!
@Override优势:可读性好,安全,优雅!!
super:代表了父类引用。
super可以用在子类的实例方法中调用父类被重写的方法。
继承后-构造器的特点。
特点:
子类的全部构造器默认一定会先访问父类的无参数构造器,
再执行子类自己的构造器。
为什么子类构造器会先调用父类构造器?
1.子类的构造器的第一行默认有一个super()调用父类的无参数构造器,写不写都存在!
2.子类继承父类,子类就得到了父类的属性和行为。
所以调用子类构造器初始化子类对象的时候,
需要先调用父类构造器去初始化继承自父类的成员。
小结:
子类的全部构造器默认一定会先访问父类的无参数构造器,
再执行子类自己的构造器。
继承后super调用父类构造器。
子类构造器的第一行可以写一个:super(...)调用父类的指定构造器
小结:
子类构造器可以在第一行通过super(...)调用父类构造器初始化继承自父类的成员~
this和super关键字使用总结
this代表了当前对象的引用(继承中指代子类对象):
this.子类成员变量。
this.子类成员方法。
this(...):可以根据参数在本类构造器中匹配访问本类其他构造器。(还没有学习)
super代表了父类对象的引用(继承中指代了父类对象空间)
super.父类成员变量。
super.父类的成员方法。
super(...):可以根据参数匹配访问父类的构造器。
拓展:this(...)可以根据参数在本类构造器中匹配访问本类其他构造器。
注意:
this(...)借用本类其他构造器。
super(...)调用父类的构造器。
this(...)和super(...)必须放在构造器的第一行,否则报错!
所以this(...)和super(...)不能同时出现在构造器中!!!
继承的特点(面试常识)
1.单继承:一个类只能继承一个直接父类。
为什么Java是单继承?
答:假如java是多继承,现在用反证法推翻:
请看如下代码:
class A{
public void test(){
sout(“A”);
}
}
class B{
public void test(){
sout(“B”);
}
}
class C extends A , B {
psvm{
C c = new C();
c.test(); // 出现类的二义性!所以Java只能单继承!
}
}
2.多层继承:一个类可以间接继承多个父类。
3.一个类可以有多个子类。
4.一个类要么默认继承了Object类,要么间接继承了Object类,Object,Object类是Java中的祖宗类!!
public class ExtendsDemo {
public static void main(String[] args) {
}
}
class A {}
class B extends A{}
class C extends B {}
class D extends B {}
本文深入解析Java中的继承机制,探讨其三大特征:封装、继承、多态,重点讲解继承的作用、格式及特点,包括子类如何继承父类的属性和行为,以及方法重写和super关键字的使用。
1416





