abstract class Person{ private int age; private String name; public Person(int age,String name){ this.age=age; this.name=name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void want(); } class Student extends Person{ private int score; public int getScore() { return score; } public void setScore(int score) { this.score = score; } public Student(int age, String name,int score) { super(age, name); this.score=score; } public void want() { System.out.println("姓名:"+getName()+"年龄:"+getAge()+"成绩:"+getScore()); } } class Worker extends Person{ private int money; public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } public Worker(int age, String name,int money) { super(age, name); this.money=money; } public void want() { System.out.println("姓名:"+getName()+"年龄:"+getAge()+"工资:"+getMoney()); } } public class ABSDemo01 { public static void main(String[] args) { Student s = new Student(10, "小明", 100); s.want(); Worker w = new Worker(35, "大明", 1000); w.want(); } }
分析上面的代码:
上面代码,在父类中已经重写了构造方法public Person(int age,String name)。如果在子类中不进行父类的有参构造方法的访问,子类就会默认访问父类的无参构造方法super(),但是父类已经构造了有参构造方法,父类中并没有无参构造方法,那它就不能调用了,所以编译就无法通过了。
总结1:
Java规定类的构造方法只能由new调用,程序员不能直接调用,但可用super()间接调用,类的构造方法是不能继承的!
总结2:
♥♥如果子类构造方法中没有显示调用父类构造方法,那么系统自动去调用父类的默认构造方法super()。
总结3:
创建有参构造方法后,系统就不再有默认无参构造方法。如果没有任何构造方法,系统会默认有一个无参构造方法。
总结4:
♥♥在没有给类提供任何构造方法时,系统会自动提供一个无参的方法实现为空的构造方法。一旦提供了自定义构造方法,系统将不会再提供这个默认构造方法。如果要使用它,程序员必须手动添加。