`
cfeers
  • 浏览: 135896 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

继承的一个例子

    博客分类:
  • java
 
阅读更多
abstract class Person{
    private String name;  
  
    public Person(String n){
        name=n;
    }
    
    public String getName() {
        return name;
    }

    public abstract String getInformation();
}

class Employee extends Person{
    private double salary;

    public Employee(String n,double s) {
        super(n);
        salary=s;
    }

    public double getSalary() {
        return salary;
    }

    @Override
    public String getInformation() {
        return "级别:员工、工资:"+getSalary();
    }

}

public class MainTest{
public static void main(String[] args){
   Person p=new Employee(); 
}
}


抽象类不能被实例化是说Person p=new Person();这样是错误的;但是Person p=new Employee(); 是可以的,创建子类的实例,父类的引用指向它
在上述主程序中,new Employee后,它会初始化对象,初始化顺序为:
父类静态块初始化---->子类静态块初始化---->父类非静态块初始化---->父类构造方法---->子类非静态块初始化---->子类构造方法。(先静后动,先父后子)
这个主程序会先初始化person类的非静态属性和构造函数再初始化employees类的非静态属性和构造函数

这就是你第一个问题的当子类的父类为抽象类时,构造方法如何追溯?而抽象类作为父类也会创建实例么?没有创建实例只是构造函数在对抽象类Person的属性初始化,对于一个类的声明,赋值    和使用两件事情,前者不需要实例化,后者必须实例化.

抽象类中的构造方法是怎么回事?就是初始化属性的作用
为什么有构造方法却不能实例化?没有这样的说法,只能针对类实例化对象
抽象类不能被实例化,构造函数被可以重载不能被覆盖,构造函数不能被继承
构造函数和类名相同,所以,继承下来也不是构造函数了,还有构造函数是一个对类初始化的特殊方法,代表这个类,一个基类是不可能知道子类会扩展什么,如果继承了就可以不写代码了,那么子类的新属性怎么初始化?当然这2点是我个人的看法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics