[java/初学者]类的继承

 前言

继承是OOP的三大特征之一,

它的作用是在现有类的基础上派生出一个新的类,这个类中继承了现有类的数据属性和行为,并且能进行扩展。

基于这一特性,我们将前者命名为“父类”或者“基类”,而后者则因此命名为“子类”或者“派生类”。但需要注意的是,所谓的子类只是相较于父类而言的,它同样可以成为另一个类的父类。

我们使用extends意为扩展关键字来实现所谓的继承关系,子类是对父类的一种扩展,子类在某种程度是一种特殊的父类,所以必须先定义一个父类才能够有继承关系的出现。



实现继承的基本格式如下:

[类修饰符] class <子类名> extends <父类名>
    {
        //成员变量
        // 成员方法
    }

以下为一个实例:

public class Demo{
    public static void main(String[] args){
        Student stu1 = new Student();
        stu1.Println();
    }
}
    //定义一个父类——Class(班级)
    class Class{
        String No="C210309";
    }
    //定义一个新类——Student(学生),并利用extends继承Class类
    class Student extends Class{
        String Name="自律一哥";
        void Println(){
            System.out.println(No+"班的"+Name);
        }
    }

运行结果:

 

代码中的Student类是继承自Class类的子类,Class类中定义了一个String类型的变量,而Student类中也定义了一个String类型的变量以及一个Println方法,从结果中来看,尽管Student类中没有定义No变量,但却依旧可以对其进行访问并输出。

这就证明子类会继承父类的成员

对于其他编程语言中的继承,java中的继承拥有自己的特点:

①:java的继承为单继承

所谓的单继承简单的来说,就是一个子类只能直接继承一个父类。

而直接继承则是指extends关键字之后只能有一个直接的父类。

class Grandfather{}
class Father {}
class Me extends Grandfather,Father{} //你不能同时继承父亲和爷爷

虽然子类只有一个直接父类,但多个类可以继承同一个父类,而这些子类也可以拥有自己的子类。

依旧以现实生活为例,一个父亲可以有多个孩子,而这些孩子也会有自己的孩子,就如同文件的树形结构一样。

class Grandfather{}
class Father extends Grandfather{}
class Me extends Grandfather{} //你和父亲都是爷爷的后代

②:java的继承具有传递性

class Grandfather{}
class Father extends Grandfather{}//父亲继承了爷爷,父亲是爷爷的孩子
class Me extends Father{} //你继承了父亲,是父亲的孩子,但同时也是爷爷的孩子

这一特点可用于描述事物的所属关系。

③:所有的类都直接或间接继承自Object类

如同所有生物都拥有共同的祖先一样,Object类是所有类的祖先,所有的类都是通过它派生出来的,而且它是唯一没有父类的类。

在前文中我们提到,子类继承父类的变量和方法并能以此为基础进行扩展,例如添加自己的变量以及方法。

但有时子类需要依照实际情况对继承来的方法进行修改,即对父类的方法进行重写

注意,在此过程中,方法名称参数列表返回值类型是不能被修改的,即只能修改方法体。而且,重写方法不能使用比被重写方法更为严格的访问权限

四种访问权限从「最大权限」「最小权限」分别是:

 public > protected > default> private

此外,子类和父类定义同名的变量,但在子类的实际使用中,父类的同名变量会被隐藏(注意,是隐藏而不是覆盖)。

以下为一个实例:

public class Demo{
    public static void main(String[] args){
        Student stu1 = new Student();
        stu1.Println();
        stu1.Habby();
    }
}
//定义一个父类——Class(班级)
class Class{
    String Name="自律一哥";
    void Habby(){
        System.out.println("内卷!");
    }
}
//定义一个新类——Student(学生),并利用extends继承Class类
class Student extends Class{
    String Name="魏挽枫";
    void Println(){
        System.out.println(Name+"今天要内卷");
    }
    void Habby(){
        System.out.println("自律!");
    }
}

运行结果: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

渡过晚枫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值