Java面向对象——继承、多态、super关键字

目录

 

阐述

继承的概念

继承的好处和弊端

继承中方法重写的注意事项

多态的概念及前提

课后作业


阐述

继承的概念

多个类存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么这多个类无需再重复定义相同的属性和行为,只要继承那个类即可。

这个单独的类称为父类、基类或超类;这些多个类称为子类或派生类。

有了继承以后,我们在定义一个类的时候,可以在基类的基础上定义自己的新成员。

继承的好处和弊端

好处:

提高了代码的复用性

提高了代码的维护性

让类与类之间产生了关系,是多态的前提

坏处:

让类与类之间产生关系,也就是让类的耦合性增强了。我们的开发原则是 高内聚 低耦合,如果耦合性太高,将来再写代码容易影响到以前的代码。

拓展知识:

内聚:类独立完成功能的能力

耦合:两个类相互依赖于对方的程度

继承中方法重写的注意事项

五个注意事项:

1.用注解@Override表明该方法是重写父类的方法,虽然没有注解也不一定会报错,但是建议写上

2.父类的私用方法不能被重写

3.子类重写父类的方法时,访问权限不能更低,建议访问权限一模一样

4.子类重写方法时,如果想调用被重写方法,可以使用super关键字

5.重写方法的方法名、形参列表和返回值类型 必须和被重写方法一模一样

拓展知识:

访问权限由高到低—— public > protected > 默认(什么都不写)> private

多态的概念及前提

概念:某一个事物,在不同的时刻表现出不同的状态。

前提:(三点)

有继承关系

有方法重写

有向上转型

拓展知识:

向上转型:默认转型,从子到父,父类引用指向子类对象,即定义父类的变量,初始化的时候new子类的对象。该对象丢失子类特有的成员。

向下转型:需要强转,从父到子,父类引用转为子类对象。该对象找回子类特有的成员。

课后作业

分析以下需求,并用代码实现

1.定义项目经理类

属性: 姓名、工号、工资、奖金

行为: 工作work

2.定义程序员类

属性:姓名、工号、工资

行为:工作work

要求:向上抽取一个父类,让这两个类都继承这个父类,共有的属性写在父类中,子类重写父类中的方法

编写测试类:完成这两个类的测试

//测试类

public class TestDay07 {
	public static void main(String[] args) {
		
		Employee employee = new Employee("张三", "00a", 1000.0);
		Manager manager = new Manager("李四", "11b", 50000.0, 10000.0);
		Coder coder = new Coder("王五", "22c", 20000.0);
		
		employee.work();
		manager.work();
		coder.work();
	}

}
//父类
//所有的子类都有姓名工号工资,都需要工作

public class Employee {
	private String name;
	private String workId;
	private double salary;
	
	public Employee(String name, String workId, double salary) {
		this.name = name;
		this.workId = workId;
		this.salary = salary;
	}
	
	public void work() {
		System.out.println(name + "正在工作,TA的工号是" + workId + ",月薪" + salary + "元。");
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getWorkId() {
		return workId;
	}
	public void setWorkId(String workId) {
		this.workId = workId;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}	

}
//项目经理类
public class Manager extends Employee{
	private double bonus;
	
	public Manager(String name, String workId, double salary, double bonus) {
		super(name, workId, salary);
		this.bonus = bonus;
	}
	
    @Override
	public void work() {
		System.out.println("项目经理" + this.getName() + "正在工作,TA的奖金是" + bonus + "元。");
	}
	
	public void setBonus(double bonus) {
		this.bonus = bonus;		
	}	
	public double getBonus() {
		return bonus;		
	}

}
//程序员类
public class Coder extends Employee {
	
	public Coder(String name, String workId, double salary) {
		super(name, workId, salary);
	}
	
    @Override
	public void work() {
		System.out.println("程序员" + this.getName() + "正在工作,TA没有奖金。");
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40995238/article/details/111996957