首页 > 编程语言 >Java 中的继承

Java 中的继承

时间:2023-12-30 10:35:45浏览次数:37  
标签:Java name show 继承 子类 Son 父类 public


继承:可以基于已存在的类构造一个新类,继承已存在的类就是复用(继承)这些类的方法和域,在此基础上,还可以添加一些新的方法和域。

1. 继承性 

继承性: 把多种有着共同特性的多的类事物抽象成一个类,这个类就是多个类的父类。父类的意义在于可以抽取多个类的共性,代码复用,减少代码量。

例:三个类,Pupil类(小学生),MiddleSchoolStudent类(中学生类),CollegeStudent类(大学生类),他们有一个特性,都要有名字,学号,班级等等属性,都要去上课,考试等行为。

我们可以写一个父类 为 student类(学生),在Student类中实现名字,学号,班级等属性,上课,考试等行为,Pupil类、 MiddleSchoolStudent类、CollegeStudent类 继承 Student 类之后,就不需要自己去实现这些方法,可以直接去访问父类的。上课这个方法你本来要写三遍,继承之后你只用实现一次, 就实现了代码复用,减少代码量。 

子类继承的关键字:extends。 A 类  extends B 类,A是B的子类,B是A的父类。

Java 只能单继承 ,即一个类只能有一个父类(A继承B之后,不能在继承其他的类);可以多层继承(A继承B,B继承C);多个类继承一个类(B和C都继承A)。

2. 覆盖方法

子类可以覆盖父类中的方法。

父类,parent.java:

package inherit;

public class Parent {
    public void show() {
        System.out.println("Parent");
    }
}

 子类,Son.java 继承 parent.java。

package inherit;

public class Son extends Parent {
    @Override
    public void show() {
        System.out.println("son");
    }

    public static void main(String[] args) {
        Son son = new Son();
        son.show();
    }
}

运行截图:

Java 中的继承_父类

子类调用父类的方法:

package inherit;

public class Son extends Parent {
    @Override
    public void show() {
        super.show();
        System.out.println("son");
    }

    public static void main(String[] args) {
        Son son = new Son();
        son.show();
    }
}

运行截图:

Java 中的继承_子类_02

3. 子类构造器

子类使用super 来调用父类构造器,父类如下所示:

package inherit;

public class Parent {
    protected String name;

    public Parent(String name) {
        this.name = name;
    }
}

 子类如下所示:

package inherit;

public class Son extends Parent {

    public Son(String name) {
        super(name);
    }

    public void show() {
        System.out.println(this.name);
    }

    public static void main(String[] args) {
        Son son = new Son("sd");
        son.show();
    }
}

运行截图:

 

Java 中的继承_子类_03

没有显式调用父类构造函数,则默认调用父类无参构造函数。

父类的构造器调用以及初始化过程一定在子类的前面。父类如下所示:

package inherit;

public class Parent {
    protected String name;

    public Parent() {
        System.out.println("parent");
    }
}

 子类如下所示:

package inherit;

public class Son extends Parent {

    public Son(String name) {
        this.name = name;
    }

    public void show() {
        System.out.println(this.name);
    }

    public static void main(String[] args) {
        Son son = new Son("sd");
        son.show();
    }
}

运行截图:

Java 中的继承_System_04

3. 子类访问父类的权限

子类访问父类的权限,如下表所示:

父类成员访问属性

在父类中的含义

在子类中的含义

public

对所有人开放

对所有人开放

protected

只有包内其它类、自己和子类可以访问

只有包内其它类、自己和子类可以访问

缺省(default)

只有包内其它类可以访问

如果子类与父类在同一个包内:只有包内其它类可以访问

否则:相当于private,不能访问

private

只有自己可以访问

不能访问

 

标签:Java,name,show,继承,子类,Son,父类,public
From: https://blog.51cto.com/xuxiangyang/9038477

相关文章

  • Java中的抽象类
    抽象类必须使用abstract关键声明,例如抽象类MyAbstractStudy:publicabstractclassMyAbstractStudy{}不能使用抽象类创建对象。抽象类中可以没有抽象方法。抽象方法必须为public或者protected,缺省情况下为public。抽象类的子类必须实现父类的抽象方法,如果没有则需要声明子类也为ab......
  • Java8 原子类 AtomicInteger 源码阅读
    AtomicInteger 是用 CAS(Compre And Swap,乐观锁)构造的一个 原子类。1. CAS CAS(CompareandSwap)比较并替换,CAS是实现乐观锁的一个重要操作。CAS是一个硬件指令,保证是原子操作,Java中通过UnSafe来实现。详细可一下我的这篇博文:传送。CAS 的基本步骤:执行函数CAS(V,E,N......
  • java-关键字与方法(二)
    charAt() 方法:charAt() 方法返回字符串中指定索引处的字符。示例:Stringstr="HelloWorld";charch=str.charAt(4);//ch的值为'o'在上面的例子中,charAt()方法返回字符串str中索引为4的字符,即字母'o'。length() 方法:length() 方法返回字符串的长度。示例......
  • 无涯教程-Java 正则 - Pattern quote(String s)函数
    java.util.regex.Pattern.quote(Strings)方法返回指定String的文字模式。staticStringquote-声明publicstaticStringquote(Strings)s  - 要被字符串化的字符串。staticStringquote-返回值文字字符串替换。staticStringquote-示例下面的示例显示ja......
  • 无涯教程-Java 正则 - Pattern String[] split(CharSequence input)函数
    java.util.regex.Pattern.split(CharSequenceinput)方法将给定的输入序列拆分为该模式的匹配项。String[]split-声明publicString[]split(CharSequenceinput)input  - 要拆分的字符序列。String[]split-返回值通过在此模式的匹配项附近拆分输入来计算的字符......
  • JavaScript的apply、call、bind方法
    JavaScript的apply、call、bind方法概述简述这三个方法存在一定的迷惑性,而且对于刚看ES6的人来说,十分难理解,这里为了以后我可能会复习到这个知识点,做出详解。总的来说,这三个方法都是将某某某(某01)绑定在某某某(某02)上,然后执行这个被绑定的某某某(某01),或者单纯就是绑定不执行。详......
  • 无涯教程-Java 正则 - Matcher matcher(CharSequence input)函数
    java.util.regex.Pattern.matcher(CharSequenceinput)方法创建一个匹配器,该匹配器将根据该模式匹配给定的输入。Matchermatcher-声明publicMatchermatcher(CharSequenceinput)input  - 要匹配的字符序列。Matchermatcher-返回值此模式的新匹配器。Matcher......
  • java-关键字与方法(一)
    synchronized关键字:synchronized关键字用于实现互斥访问共享资源的同步机制。它可以应用于方法或代码块。当一个线程进入synchronized代码块时,它将获得锁,其他线程必须等待锁释放才能执行该代码块。synchronized关键字确保了同一时间只有一个线程可以执行被保护的代码块,从而避免......
  • java-多线程编程
    多线程是指在一个程序中同时执行多个线程,每个线程都是独立运行的。Java中的多线程编程允许在同一个程序中同时执行多个任务,以提高程序的效率和响应性。以下是一些与Java多线程编程相关的重要概念:线程(Thread):线程是程序的执行单元,可以并发执行多个任务。在Java中,可以通过创建Thre......
  • java-集合框架
    集合框架是Java中用于存储和操作数据集合的一组类和接口。它提供了各种实现了不同数据结构的集合类,例如列表(List)、集(Set)、映射(Map)等。以下是一些与Java集合框架相关的重要概念:集合接口(CollectionInterface):Java中的集合框架定义了多个核心接口,包括Collection、List、Set、Map等......