• 继承(使用及深入、super、重写/复写)--学习JavaEE的day14


    day14

    一、继承

    概念

    Java中的继承是一个对象获取父对象的所有属性和行为的机制

    理解:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法

    关键字extends

    优点:减少代码的冗余

    缺点:继承会增加类与类之间的关系,会增加代码的维护难度

    继承的使用

    使用场景:多个类似的类,有相同的属性和方法,就可以把相同属性和方法抽取到父类

    需求:编写中国人和日本人的类,创建各自的对象

    分析:

    人类:

    属性:姓名、性别、年龄

    方法:吃饭饭、睡觉觉

    中国人的类 继承 人类 :

    属性:身份证

    方法:打太极

    日本人的类 继承 人类:

    属性:年号

    方法:拍电影

    ps:(省略部分代码)

    public class Person {
    
    String name;
    char sex;
    int age;
    
    public void eat(){
    	System.out.println(this.name + "吃饭饭");
    }
    
    public void sleep(){
    	System.out.println(this.name + "睡觉觉");
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    //            子类           继承        父类
    public class Chinese extends Person{
    
    String id;
    
    public void playTaiJi(){
    	System.out.println("中国人打太极");
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    	//创建对象
    	Chinese c = new Chinese();
    	
    	//操作父类属性
    	c.name = "奇男子";
    	c.sex = '男';
    	c.age = 22;
    	System.out.println(c.name);
    	System.out.println(c.sex);
    	System.out.println(c.age);
    	
    	//操作子类属性
    	c.id = "1234567890";
    	System.out.println(c.id);
    	
    	//调用父类方法
    	c.eat();
    	c.sleep();
    	
    	//调用子类方法
    	c.playTaiJi();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    继承内存图

    继承内存图

    super

    理解:

    super表示父类

    作用:

    1.super.属性:在子类中,调用父类的非私有化的成员属性

    2.super.方法:在子类中,调用父类的非私有化的成员方法

    3.super():在子类构造方法中的第一句调用父类的非私有化的构造方法

    案例:

    继承的使用的需求案例

    封装父类,添加无参构造、有参构造、get、set方法(都由eclipse直接生成),成员方法保留

    经验

    私有化属性:eclipse工具栏 ------->Source------->Select getters and setters to create—>勾选需要生成属性的get和set方法;

    Source中还有一些自动生成,如构造方法等等;

    子类继承父类,封装子类,super使用

    public class Chinese extends Person{
    
    private String id;
    
    public Chinese() {
    }
    
    public Chinese(String name, char sex, int age, String id) {
    	super(name, sex, age);
    	this.id = id;
    }
    
    public String getId() {
    	return id;
    }
    
    public void setId(String id) {
    	this.id = id;
    }
    
    public void playTaiJi(){
    	
    	System.out.println(super.getName() + "打太极");
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    测试类,有有参构造直接赋值,不用一个个赋值

    	//创建对象
    	Chinese c = new Chinese("奇男子", '男', 22, "1234567890");
    	
    	//调用父类方法
    	c.eat();
    	c.sleep();
    	
    	//调用子类方法
    	c.playTaiJi();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    小结

    编写一个类的步骤:

    1.属性

    2.私有化属性

    3.无参构造

    4.有参构造

    5.get/set方法

    6.其他的方法

    深入继承:

    思考题:
    1. 创建子类对象,会不会调用父类构造方法?

    2. 创建子类对象,会不会创建父类对象?
      不会

    3. 创建子类对象,为什么会调用父类构造方法?
      目的是将父类的属性存放在子类对象中(因为会在子类对象中开辟空间,用于存储父类的成员属性)

    4. 创建子类对象,先调用父类构造方法还是子类构造方法?
      先调用子类构造方法

    5. 创建子类对象,先完成父类构造方法还是子类构造方法?
      先完成父类构造方法

    6. 子类可以继承父类私有化的属性和方法吗?

      ​ 可以,但是只能间接调用

    7. 子类对象是否能继承父类所有的属性和方法?

      ​ Java官网上,明确表示子类不能继承父类私有化的属性和方法,这是站在使用的角度

      ​ 实际上,子类能继承父类私有化的属性方法,但是不能直接使用,可以在父类中编写公有方法去调用私有的属性和方法

    案例:
    public class Father {
    	
    
    private String fatherAttr = "父类私有化属性";
    
    public Father() {
    	System.out.println("调用父类的构造方法");
    }
    
    public String getFatherAttr() {
    	return fatherAttr;
    }
    
    public void setFatherAttr(String fatherAttr) {
    	this.fatherAttr = fatherAttr;
    }
    
    private void method01(){
    	System.out.println("父类私有化方法");
    }
    
    public void method02(){
    	method01();
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    public class Son extends Father{
    
    public Son() {
    	//super();//默认实现:调用父类的构造方法
    	System.out.println("调用子类的构造方法");
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    public class Test01 {
    	public static void main(String[] args) {	
    	Son son = new Son();
    	System.out.println(son.getFatherAttr());
    	son.method02();
    }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    重写/复写

    含义:

    重写也叫做复写,将父类中方法在子类中重新编写一遍

    应用场景:

    父类方法不满足子类需求时,子类就可以重复父类的方法

    条件:

    1.在子类中重写父类的方法

    2.返回值、方法名、参数列表必须跟父类重写的方法一致

    3.访问修饰符不能比父类更严格

    需求:

    编写中国人和日本人的类,创建各自的对象

    public class Chinese extends Person{
    //省略一部分
    
    //@Override -- 重写的注解
    //注解:给程序员和系统解释代码信息
    @Override
    public void eat(){
    	System.out.println(super.getName() + "吃山珍海味");
    }
    //在测试类new对象调用输出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    总结

    1.继承的使用

    2.继承的深入 — 重要

    3.super

    4.重写

  • 相关阅读:
    CUDA小白 - NPP(10) 图像处理 Memort Management
    dpkg工具、ZED相机sdk、监控nvidia
    QT中表格控件使用
    机器学习7—聚类算法之K-means算法
    【运维面试100问】(一)打包了一个镜像推送上去harbor,推不上是什么原因?
    JS实时获取录音数据并播放
    16. MyBatis的延迟加载机制是什么?如何配置?有哪些优缺点?
    NVIC中断优先级管理
    【Java分享客栈】我有一个朋友,和前端工程师联调接口被狠狠鄙视了一番。
    c 利用socket传输大文件
  • 原文地址:https://blog.csdn.net/gangain/article/details/136399458