package com.atguigu.test02; /* * 继承: * (1)延续 * (2)扩展 * * 1、为什么要有继承? * (1)当某个类,需要派生出很多子类别 * Person: * 需要派生出Teacher,Student等等子类别 * 那么此时Person中的共有的部分,就不需要在子类别中再次去声明 * (2)当多个类,出现了共同的特征时,可以把共同的部分抽取到父类中 * * 目的: * 代码的复用和扩展 * * 2、如何实现继承? * 【修饰符】 class 子类 extends 父类{ * } * * 子类:subclass,也称为派生类 * 父类:superclass,也称为超类,基类 * * 3、继承的特点: * (1)子类继承了父类, * 从事物的特征来说,子类会继承父类所有的特征(属性和方法)。 * 但是从代码操作角度来说,父类中私有的属性、方法在子类中是不能直接使用的 * (2)子类继承父类时,构造器是不能被继承的 * (3)子类继承父类时,在子类的构造器中一定要去调用父类的构造器 * 默认情况下,调用的是父类的无参构造; * 如果父类没有无参构造,那么在子类的构造器的首行,必须手动调用父类的有参构造; * * 未完待续。。。 */ public class TestInherited { public static void main(String[] args) { Teacher t = new Teacher(); t.setName("柴老师"); t.setAge(18); System.out.println("姓名:" + t.getName()); System.out.println("年龄:" + t.getAge()); // Teacher t2 = new Teacher("宋老师",28); } } class Person{ private String name; private int age; //构造器 public Person(String name, int age) { this.name = name; this.age = age; } //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) { this.age = age; } } class Teacher extends Person{ private double salary; public Teacher() { super(null, 0); } public Teacher(String name, int age, double salary) { super(name, age);//调用父类的有参构造,必须在子类构造器的首行 this.salary = salary; } public void test(){ //System.out.println("name = " + name);//父类私有的属性在子类中不能直接使用 } } class Student extends Person{ private int score; public Student(String name, int age, int score) { super(name, age);//调用父类的有参构造,必须在子类构造器的首行 this.score = score; } }
package com.atguigu.test02; /* * 3、继承的特点: * (1)子类继承了父类, * 从事物的特征来说,子类会继承父类所有的特征(属性和方法)。 * 但是从代码操作角度来说,父类中私有的属性、方法在子类中是不能直接使用的 * (2)子类继承父类时,构造器是不能被继承的 * (3)子类继承父类时,在子类的构造器中一定要去调用父类的构造器 * 默认情况下,调用的是父类的无参构造; * 如果父类没有无参构造,那么在子类的构造器的首行,必须手动调用父类的有参构造; * (4)Java只支持单继承,即一个Java类只能有一个直接父类 * 只能有一个亲生父亲 * (5)Java支持多层继承,即父类还可以有父类 * 代代相传 * (6)一个Java类可以同时有很多个子类,而且子类还可以有子类 * 一个父亲可以有多个孩子,子孙满堂 * (7)子类可以扩展父类没有的属性、方法 */ public class TestInherited2 { } class Things{ } class Graphic extends Things{ } class Circle extends Graphic{ } class Rectangle extends Graphic{ }