继承(使用及深入、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 + "睡觉觉");
}

}

//            子类           继承        父类
public class Chinese extends Person{

String id;

public void playTaiJi(){
	System.out.println("中国人打太极");
}

}

	//创建对象
	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();

继承内存图

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() + "打太极");
}

}

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

	//创建对象
	Chinese c = new Chinese("奇男子", '男', 22, "1234567890");
	
	//调用父类方法
	c.eat();
	c.sleep();
	
	//调用子类方法
	c.playTaiJi();
小结

编写一个类的步骤:

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();
}

}

public class Son extends Father{

public Son() {
	//super();//默认实现:调用父类的构造方法
	System.out.println("调用子类的构造方法");
}

}

public class Test01 {
	public static void main(String[] args) {	
	Son son = new Son();
	System.out.println(son.getFatherAttr());
	son.method02();
}

}

重写/复写

含义:

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

应用场景:

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

条件:

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

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

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

需求:

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

public class Chinese extends Person{
//省略一部分

//@Override -- 重写的注解
//注解:给程序员和系统解释代码信息
@Override
public void eat(){
	System.out.println(super.getName() + "吃山珍海味");
}
//在测试类new对象调用输出

总结

1.继承的使用

2.继承的深入 --- 重要

3.super

4.重写

相关推荐
程序媛小果2 分钟前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
追风林8 分钟前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
芒果披萨22 分钟前
El表达式和JSTL
java·el
阿伟来咯~33 分钟前
记录学习react的一些内容
javascript·学习·react.js
Suckerbin1 小时前
Hms?: 1渗透测试
学习·安全·网络安全
duration~1 小时前
Maven随笔
java·maven
水豚AI课代表1 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
聪明的墨菲特i1 小时前
Python爬虫学习
爬虫·python·学习
跃ZHD1 小时前
前后端分离,Jackson,Long精度丢失
java