Java学习笔记13.——面向对象进阶之继承

本文讲述了Java中继承的原理、优点和使用场景,以及子类与父类之间的关系,包括构造方法、成员变量和方法重写等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java学习笔记13.——面向对象进阶之继承



前言

Java中三大特性,封装,继承,多态。
之前学了封装的知识点,对象代表什么,就得封装对应的数据,并提供封装数据对应的行为。
今天学习继承的知识点。


一、继承

1.继承是什么?

假设

当学生类中有姓名属性,性别属性,年龄属性,学习方法,吃饭方法,set/get方法
当老师类中有姓名属性,性别属性,年龄属性,教书方法,吃饭方法,set/get方法

如果自己编写会发现代码重复度太高了,这样不利于节省时间。
这时候就可以设计一种东西,把重复的代码提出来,然后去继承这些重复的代码,并添加上不重复的方法。

假设提出来的公共代码有姓名属性,性别属性,年龄属性,吃饭方法,set/get方法

Java中使用extends关键字来实现继承
具体使用情况如下:

public class Student extends Person{
   }

这时候Student类之间继承了Person中的所有属性和方法,并且Student类中还可以加上学生的学习方法。
此时的学生类就是子类(派生类),Person就是父类(基类或超类)

2.继承的好处

1.父类中的都是重复性高的属性和方法,子类继承可以提高代码的复用性
2.子类可以在父类上增加其他功能,使子类更加强大

3.什么时候使用继承

当类与类之间具有共性(相同)代码时,且满足子类是父类的一种东西,就可以使用继承来优化代码。

比如学生类满足Person(人类)类,老师也满足人类就可以使用。
如果学生有id,名字,成绩和手机有id,名字,价格。虽然id,名字是相同的,但是类不属于同一个东西。学生是人,手机是商品不能混为一谈这种就不能使用继承。

4.继承的特点

Java只支持单继承,不支持多继承,但支持多层继承

只支持单继承:一个子类只能有一个父类,一个儿子只能有一个爸爸
不支持多继承:一个子类只能有一个父类,不能有多个父类。一个儿子不能有多个父亲
支持多层继承:一个子类继承了父类,该父类又继承了一个类。这里子类和父类2的关系还是父子类关系。
在这里插入图片描述

但是不代表没有继承的类就不是子类了。

每一个类都间接或直接的基础object类。

这是由虚拟机进行的,如果该类没有被继承就会继承object类,那继承了的类就属于间接继承object类,因为父类会直接继承object类。

注意:父类的私有修饰的不能被访问
因为父亲的私房钱你不能使用。
所以子类能继承父类中非私有的属性和方法。

5.继承练习

题目

现在有四种动物:布偶猫、中国狸花猫、哈士奇、泰迪。暂时不考虑属性,只要考虑行为。
请按照继承的思想特点进行继承体系的设计。
四种动物分别有以下的行为:
布偶猫:吃饭、喝水、抓老鼠中国狸花猫:吃饭、喝水、抓老鼠哈士奇:吃饭、喝水、看家、拆家泰迪:吃饭、喝水、看家、蹭一蹭

第一步分析
从下往上分析
在这里插入图片描述
第二步敲代码,从上往下

package a02StaticDemo3.cat;

public class Test {
   
    public static void main(String[] args) {
   
        Teddy teddy = new Teddy();
        teddy.eat();
        teddy.drink();
        teddy.LookingHome();
        teddy.sajiao();

        System.out.println("-------------------------");
        buou buou = new buou();
        buou.eat();
        buou.drink();
        buou.CatingMice();
    }
}

6.子类到底能继承父类中的哪些内容?

一个类中包含三个部分

构造方法 非私有 不能继承 私有private 不能继承
成员变量 非私有 能继承 私有private 能继承
成员方法 非私有 能继承 私有private 不能继承

1.构造方法

一旦构造方法可以继承,那么就违背了构造方法的定义所以不管私有不私有,构造方法都不难继承

2.成员变量

虽然成员变量私有的可以继承,但是就像上了锁的箱子不能直接使用。

钥匙就是get/set方法

3.成员方法

我这是在给我自己做笔记,直接粘贴复制。
累加虚方法,实际上就是一个空间装下这些方法方便使用。所有的设计不过都是为了更好的使用,如果有冗余那就是设计得不够完美或者有东西没有考虑完全。
在这里插入图片描述

成员方法里面的方法里:
非private 非static 非final 修饰的方法就可以进入虚方发表中。

阿伟老师的PPT做得太好了,爱了爱了。
在这里插入图片描述
加载字节码文件时发现zi类还有父类就加载fu字节码文件,因为所有没有继承的类都继承object类,所以object类进入方法区。堆内容中,右边是子类的成员变量,左边是父类的成员变量。

二、特点

1.成员变量的特点

特点:就近原则
先在局部变量寻找,本类寻找,然后父类逐层往上
如果成员变量同名,那么就可以这样。

package a02StaticDemo3.Test;

public class Test2 {
   
    public static void main(String[] args) {
   
        Zi z = new Zi();
        z.Name();
    }
}
class Ye{
   
    String name = "ye";
}

class Fu2 extends Ye{
   
//    String name = "Fu";
}

class Zi extends Fu2{
   
    String name = "Zi";

    public void Name(){
   
        String name = "ZiShow";
        System.out.println(name);//ZiShow
        System.out.println(this.name);//Zi
        System.out.println(super.name);//ye,如果Fu2没被注释这里输出的就是Fu
    }
}

super只能代表父类(间接,直接),不能叠加super比如

super.super.name;

2.成员方法的特点

特点:就近原则

public class Test3 {
   
    public static void main(String[] args) {
   
        OverseasStudent s = new OverseasStudent();
        s.eat();
        s.drink();
    }

}

class Person{
   
    public void eat(){
   
        System.out.println("吃米饭,用筷子");
    }

    public void drink(){
   
        System.out.println("喝水");
    }

}

class OverseasStudent 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注技术200年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值