当前位置: 首页 > news >正文

继承知识点—详细

一:普通写法

package extend_;

public class Extends01 {
    public static void main(String[] args) {
        Pubil pubil = new Pubil();
        pubil.name="小明";
        pubil.age=18;
        pubil.testing();
        pubil.setScore(60);
        pubil.showInfo();

        System.out.println("-------------------------");
        Graduate graduate = new Graduate();
        graduate.name="王二狗";
        pubil.age=20;
        pubil.testing();
        pubil.setScore(80);
        pubil.showInfo();

    }
}
package extend_;

//小学生
public class Pubil {
    public String name;
    public int age;
    private double score;

    public void setScore(double score) {
        this.score = score;
    }

    public void testing() {
        System.out.println("小学生"+name+"正在考小学数学");
    }

    public void showInfo(){
        System.out.println("小学生名"+name+"年龄"+age+"成绩"+score);
    }
}
package extend_;

public class Graduate  {
    public String name;
    public int age;
    private double score;

    public void setScore(double score) {
        this.score = score;
    }

    public void testing() {
        System.out.println("大学生"+name+"正在考大学数学");
    }

    public void showInfo(){
        System.out.println("小学生名"+name+"年龄"+age+"成绩"+score);
    }
}

二:用继承方法写

结构为:

Extend01类:

package extend_.improve_;

import extend_.Graduate;
import extend_.Pubil;

public class Extend01 {
    public static void main(String[] args) {
        extend_.Pubil pubil = new Pubil();
        pubil.name="小明";
        pubil.age=18;
        pubil.testing();
        pubil.setScore(60);
        pubil.showInfo();

        System.out.println("-------------------------");
        extend_.Graduate graduate = new Graduate();
        graduate.name="王二狗";
        pubil.age=20;
        pubil.testing();
        pubil.setScore(80);
        pubil.showInfo();

    }
}

Graduate类:

package extend_.improve_;

public class Graduate extends Student {
    public void testing() {
        System.out.println("大学生   "+name+"    正在考大学数学");
    }
}

Pubil类:

package extend_.improve_;

//让Public 继承 Student类
public class Pubil extends Student{
    public void testing() {
        System.out.println("小学生    "+ name +"    正在考小学数学");
    }
}

Student类:

package extend_.improve_;

//父类,是Public 和 Graduate 的父类
public class Student {
    public String name;
    public int age;
    private double score;

    //共有的方法
    public void setScore(double score) {
        this.score = score;
    }

    public void showInfo(){
        System.out.println("学生名为  "+name+"    年龄"+age+"    成绩 "+score);
    }


}

三:继承的细节

1.

注:我们发现  n4  和  test400() 爆错了,因为:私有属性和方法不能在子类中直接访问!!!,我们该怎么做才能访问呢?

答:要通过父类提供公共的方法去访问。

2.

package extend_;

public class Base {
    public int n1=100;
    protected int n2=200;
    int n3=300;
    private int n4=400;

    public Base() {  //无参构造器
        System.out.println("父类Base()被调用");
    }

    //父类提供一个public的方法,返回n4
    public int getN4(){
        return n4;
    }

    public void CallTest400(){
        test400();
    }

    public void test100(){
        System.out.println("Base test100");
    }

    protected void test200(){
        System.out.println("Base test200");
    }

    void test300(){
        System.out.println("Base test300");
    }

    private void test400(){
        System.out.println("Base test400");
    }
}

注:先调用父类的构造器,在调用子类的构造器。为什么会调用呢,因为子类的无参构造器里面有super()命名(默认调用子类的无参构造器),可写可不写。

2.1

注:由上面一个图可知,无论怎么样,都先调用父类的无参构造器!!!

2.2:如果父类没有提供无参构造器,该怎么办?

该代码的无参构造器没有了,有一个有参构造器,(无参构造器被覆盖了)

package extend_;

public class Base {
    public int n1=100;
    protected int n2=200;
    int n3=300;
    private int n4=400;

   // public Base() {  //无参构造器
        //System.out.println("父类Base()被调用");
   // }

    public Base(String name,int age ){       //有参构造器
        System.out.println("父类Base(String name,int age )被调用");
    }

    //父类提供一个public的方法,返回n4
    public int getN4(){
        return n4;
    }

    public void CallTest400(){
        test400();
    }

    public void test100(){
        System.out.println("Base test100");
    }

    protected void test200(){
        System.out.println("Base test200");
    }

    void test300(){
        System.out.println("Base test300");
    }

    private void test400(){
        System.out.println("Base test400");
    }
}

上面有二个地方爆错

2.2:解决办法(加super指定调用父类中的哪个构造器)

运行效果:

四:继承的内存布局

package extend_;

public class ExtendsTheory {
    public static void main(String[] args) {
        Son son=new Son();
        System.out.println(son.name);
        System.out.println(son.age);
        System.out.println(son.hobby);
    }
}

class GrandPa{  //爷类
    String name="大头爷爷";
    String hobby="旅游";
}

class Father extends GrandPa{  //父类
    String name="大头爸爸";
    int age=30;
}

class Son extends Father{  //子类
    String name="大头儿子";
}

注意事项:

运行结果:

五:super和this关键字

相关文章:

  • EMC整改黄金搭档:共模滤波器与磁环
  • Qt中的 #include “xxxx.moc“ 说明
  • 3.13-4 字符
  • 【C++】如何高效掌握UDP数据包解析
  • 2023年蓝桥杯 省赛 ————特殊日期
  • 2025年【广东省安全员C证第四批(专职安全生产管理人员)】考试及广东省安全员C证第四批(专职安全生产管理人员)模拟试题
  • CMake简单入门
  • priority_queue模拟实现
  • 靶场(十一)---小白心得靶场思路---Clue
  • RBA+minibatch的尝试
  • ImportError: cannot import name ‘genai‘ from ‘google‘ (unknown location) 问题如何处理
  • C++11函数包装器
  • 防重复提交详解:从前端Vue到后端Java的全面解决方案
  • Matlab 风力发电机磁悬浮轴承模型pid控制
  • 在办公电脑上本地部署 70b 的 DeepSeek 模型并实现相应功能的大致步骤
  • 点灯、点各式各样的灯
  • yarn调度过程
  • C++20 指定初始化器
  • 算是解决可以访问github但无法clone的问题
  • 【Java 优选算法】分治-归并排序
  • 开发网站教程/怎么做手工
  • 做短租类型的网站/百度一下百度主页官网
  • 做网站的技术要求/网站seo优化步骤
  • 南宁月嫂网站建设/优化网站快速排名软件
  • 帮别人做网站规划/seo网站查询
  • 海南省城乡建设部网站首页/谷歌搜索引擎入口2023