继承
继承可以解决代码复用,让代码更加靠近人的思维,当多个类存在相同的属性【变量】和方法时,可以从这些类中抽象出父类。
在父类中定义这些相同的属性和方法,所有的子类不需要定义这些属性和方法。只需要通过关键字:extends来声明继承父类。
继承的好处:
1、代码复用性提高
2、代码扩展性和维护性提高
基本语法:
class 子类 extends 父类{}
1 public class Extends { 2 public static void main(String[] args) { 3 4 //测试java的继承性,创建一个对象Person1作为父类,父类中有姓名,年龄(属性私有) 5 //1、在父类中写一个方法sell,输出信息 6 //2、创建一个子类对象Teather,私有属性(薪水:selaray),重写sell方法输出信息 7 //3、创建一个子类对象Student,私有属性(成绩:score),重写sell方法输出信息 8 9 Student student = new Student("张三",13,85.5); 10 System.out.println(student.sell()); 11 12 Teather teather = new Teather("李四",30,20000); 13 System.out.println(teather.sell()); 14 teather.T(); 15 } 16 } 17 class Person1{ 18 19 private final String name; 20 public final int age; 21 22 public Person1(String name, int age) { 23 this.name = name; 24 this.age = age; 25 } 26 27 public String getName() { 28 return name; 29 } 30 31 public String sell(){ 32 return "姓名: " + name + "\t" + "年龄: " + age + "\t"; 33 } 34 35 } 36 37 class Teather extends Person1{ 38 39 private double salary; 40 41 public Teather(String name, int age, double salary) { 42 43 super(name,age); 44 this.salary = salary; 45 } 46 47 public String sell(){ 48 return super.sell() + "薪资: " + salary; 49 } 50 51 public void T(){ 52 //父类的私有属性无法直接访问 53 //System.out.println(name); 54 System.out.println(getName()); 55 System.out.println(age); 56 } 57 } 58 59 class Student extends Person1{ 60 61 private double score; 62 63 64 public Student(String name, int age, double score) { 65 super(name, age); 66 this.score = score; 67 } 68 69 public String sell(){ 70 return super.sell() + "成绩: " + score; 71 } 72 }
姓名: 张三 年龄: 13 成绩: 85.5 姓名: 李四 年龄: 30 薪资: 20000.0 李四 30
【细节注意】
1、在对象实例化时,先调用子类构造器,通过子类构造器调用父类构造器,需要使用到关键字:super
2、super和this一样,只能放在构造器的第一行,因此两者不能同时使用