[BigDataJava:Java&static关键字继承.V07] [BigDataJava.面向对象][|章节三|static关键字和继承|继承的由来和概念|继承的特点|]
一、继承的由来和概念
二、集成的概念
### --- 继承的概念 ~~~ ——> 当多个类之间有相同的特征和行为时,可以将相同的内容提取出来组成一个公共类, ~~~ ——> 让多个类吸收公共类中已有特征和行为而在多个类型只需要编写自己独有特征和行为的机制,叫做继承。 ~~~ ——> 在Java语言中使用extends(扩展)关键字来表示继承关系。 ~~~ ——> 如: ~~~ ——> public class Worker extends Person{} -表示Worker类继承自Person类 ~~~ ——> 其中Person类叫做超类、父类、基类。 ~~~ ——> 其中Worker类叫做派生类、子类、孩子类。 ~~~ ——> 使用继承提高了代码的复用性,可维护性及扩展性,是多态的前提条件。
三、继承的特点
### --- 继承的特点 ~~~ ——> 子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承只是不能直接访问。 ~~~ ——> 无论使用何种方式构造子类的对象时都会自动调用父类的无参构造方法, ~~~ ——> 来初始化从父类中继承的成员变量,相当于在构造方法的第一行增加代码super()的效果。 ~~~ ——> 使用继承必须满足逻辑关系:子类is a 父类,也就是不能滥用继承。 ~~~ ——> Java语言中只支持单继承不支持多继承, ~~~ ——> 也就是说一个子类只能有一个父类,但一个父类可以有多个子类。
四、编程代码
### --- 编程代码:编程实现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类的测试 */
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)