[BigDataJava:Java&static关键字继承.V08] [BigDataJava.面向对象][|章节三|static关键字和继承|方法重写的概念和使用|方法重写的原则|]
一、方法重写的概念和使用
### --- 方法重写的概念 ~~~ ——> 从父类中继承下来的方法不满足子类的需求时, ~~~ ——> 就需要在子类中重新写一个和父类一样的方法来覆盖从父类中继承下来的版本, ~~~ ——> 该方式就叫做方法的重写(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 豆芽真好吃! 王者荣耀真好玩! 今天的砖头有点烫手...
===============================END===============================
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
来自为知笔记(Wiz)