面向对象三大特征: 继承

本文深入解析Java中的继承机制,探讨其三大特征:封装、继承、多态,重点讲解继承的作用、格式及特点,包括子类如何继承父类的属性和行为,以及方法重写和super关键字的使用。

面向对象的三大特征:封装,继承,多态。*


继承是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 {}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值