类设计技巧:
1、保证数据私有化
2、对数据进行显式的初始化
3、不要过多使用基本数据类型(相关的基本数据可以封装成一个新的类)
4、将类职责进行分解
5、名字尽量体现类和方法的职责
继承
extends表示新类派生于一个已存在的类,已存在的类称为超类、父类,新类称为子类、派生类。
在子类中新添加的方法不属于父类,父类不能使用。
子类继承父类的所有域和方法
子类访问父类的私有域:
子类可以调用父类中的public方法来设置私有域,但是不能直接访问,也不能访问父类的private方法。
只有父类能直接访问
子类要访问必须借助公有的接口。
public double getSalary(){
//子类重写方法
return 10+getSalary(); //调用父类接口获得父类私有域、名称错误
}
这里希望·调用父类的getSalary,需要加上
super.getSalary()
子类可以增加域、增加方法、覆盖方法,但是不能删除继承的域和方法
子类构造函数
子类执行构造函数时,
必须调用父类的一个构造器(一个,不是0或2)
可以使用super(param),显式地在子类构造函数中调用父类构造函数,显式调用父类的构造函数,这一句话必须放在子类构造函数的第一句。
不显式声明,则采用父类的默认构造函数
不能将父类对象赋给子类,反之可以(经理是雇员,但雇员不一定是经理)
Manager m=new Manager();
Employee e=new Employee();
Employee e2=new Manager();
m.getSalary();
e.getSalary();
e2.getSalary();
这里Java能自动识别出,e2本身是Manager对象,调用子类的方法,而不是父类的
多态:一个变量对象可以可以指向多种实际类型
动态绑定:在运行时能够自动选择调用哪一种方法,
如果不希望哪一个方法被继承,可以设为final
Manager m=new Manager();
Employee e=new Manager();
m.newfun(); //Manager对象执行子类中的新方法
e.newfun(); //错误,虽然e是一个Manager,但是赋给了Employee变量,只能执行声明类型Employee中存在的函数
这样也不行
Manager boss=new Manager();
Employee e=boss;
boss.newfun(); //可以
e.newfun(); //不可以
Manager boss=new Manager();
Employee e=boss;
Manager m;
m=boss; //正确
m=e; </