|NO.Z.00048|——————————|BigDataEnd|——|Java&static关键字继承.V08|——|Java.v08|方法重写|概念使用|原则|
一、方法重写的概念和使用
### --- 方法重写的概念
~~~ ——> 从父类中继承下来的方法不满足子类的需求时,
~~~ ——> 就需要在子类中重新写一个和父类一样的方法来覆盖从父类中继承下来的版本,
~~~ ——> 该方式就叫做方法的重写(Override)。
二、方法重写的原则
### --- 方法重写的原则
~~~ ——> 要求方法名相同、参数列表相同以及返回值类型相同,从Java5开始允许返回子类类型。
~~~ ——> 要求方法的访问权限不能变小,可以相同或者变大。
~~~ ——> 要求方法不能抛出更大的异常(异常机制)。
三、编程代码
### --- 编程代码:编程实现Person类的封装
/*
编程实现Person类的封装
*/
public class Person {
// 1.私有化成员变量,使用private关键字修饰
private String name;
private int age;
//private boolean gender; // 性别
// 3.在构造方法中调用set方法进行合理值的判断
public Person() {
System.out.println("Person()");
}
public Person(String name, int age) {
System.out.println("Person(String, int)");
setName(name);
setAge(age);
}
// 2.提供公有的get和set方法并在方法体中进行合理值的判断
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age > 0 && age < 150) {
this.age = age;
} else {
System.out.println("年龄不合理哦!!!");
}
}
// 自定义成员方法实现特征的打印
public void show() {
System.out.println("我是" + getName() + ",今年" + getAge() + "岁了!");
}
// 自定义成员方法描述吃饭的行为
public void eat(String food) {
System.out.println(food + "真好吃!");
}
// 自定义成员方法描述娱乐的行为
public void play(String game) {
System.out.println(game + "真好玩!");
}
}
四、编程代码: 自定义Worker类继承自Person类
### --- 编程代码: 自定义Worker类继承自Person类
/*
自定义Worker类继承自Person类
*/
public class Worker extends Person {
private int salary;
public Worker() {
super(); // 表示调用父类的无参构造方法,若没有加则编译器自动添加
System.out.println("Worker()");
}
public Worker(String name, int age, int salary) {
super(name, age); // 表示调用父类的有参构造方法
System.out.println("Worker(String, int, int)");
//setName(name);
//setAge(age);
setSalary(salary);
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
if(salary >= 2200) {
this.salary = salary;
} else {
System.out.println("薪水不合理哦!!!");
}
}
// 自定义成员方法描述工作的行为
public void work() {
System.out.println("今天的砖头有点烫手...");
}
// 自定义show方法覆盖从父类中继承的版本
@Override // 标注/注解,用于说明下面的方法是对父类方法的重写,若没有构成重写则编译报错
public void show() {
super.show(); // 表示调用父类的show方法
System.out.println("我的薪水是:" + getSalary());
}
}
五、编程代码:编程实现Worker类的测试
### --- 编程代码:编程实现Worker类的测试
/*
编程实现Worker类的测试
*/
public class WorkerTest {
public static void main(String[] args) {
// 1.使用无参方式构造Worker类型的对象并打印特征
Worker w1 = new Worker();
// 当子类重写show方法后,则下面调用的是重写以后的版本
w1.show(); // null 0
System.out.println("----------------------------------");
// 2.使用有参方式构造Worker类型的对象并打印特征
Worker w2 = new Worker("zhangfei", 30, 3000);
w2.show(); // zhangfei ...
// 调用成员方法测试
w2.eat("豆芽");
w2.play("王者荣耀");
w2.work();
}
}
六、编译打印
### --- 编译
C:\Users\Administrator\Desktop\project>javac WorkerTest.java
### --- 打印输出
C:\Users\Administrator\Desktop\project>java WorkerTest
Person()
Worker()
我是null,今年0岁了!
我的薪水是:0
----------------------------------
Person(String, int)
Worker(String, int, int)
我是zhangfei,今年30岁了!
我的薪水是:3000
豆芽真好吃!
王者荣耀真好玩!
今天的砖头有点烫手...
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv002-Java面向对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通