一个class可以包含多个field,例如,我们给Person类就定义了两个field: class Person { public String name; public int age; } 但是,直接把field用public暴露给外部可能会破坏封装性。比如,代码可以这样写: Person ming = new Person(); ming.name = "Xiao Ming"; ming.
创建实例的时候,我们经常需要同时初始化这个实例的字段,例如: Person ming = new Person(); ming.setName("小明"); ming.setAge(12); 初始化对象实例需要3行代码,而且,如果忘了调用setName()或者setAge(),这个实例内部的状态就是不正确的。 能否在创建对象实例时就把内部字段全部初始化为合适的值? 完全可以。 这时,我们就需要构造
在前面的章节中,我们已经定义了Person类: class Person { private String name; private int age; public String getName() {...} public void setName(String name) {...} public int getAge() {...} public void setAge(int age)
在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)。 例如,在Person类中,我们定义了run()方法: class Person { public void run() { System.out.println("Person.run"); } } 在子类Student中,覆写这个run()方法: class Student extends Perso
由于多态的存在,每个子类都可以覆写父类的方法,例如: class Person { public void run() { … } } class Student extends Person { @Override public void run() { … } } class Teacher extends Person { @Override public void run() { … }
在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力。 如果一个抽象类没有字段,所有方法全部都是抽象方法: abstract class Person { public abstract void run(); public abstract String getName(); } 就可以把该抽象类改写为接口:interface
在一个class中定义的字段,我们称之为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。 还有一种字段,是用static修饰的字段,称为静态字段:static field。 实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。举个例子: class Person { public String name; pub