面向对象进阶
- 类之间的关系
- 继承
- 方法重写与重载
类之间关系
横向关系
- 依赖关系
- 关联关系
- 组合关系
- 聚合关系
纵向关系
- 继承关系
- 实现关系
依赖关系
某个对象在执行指定方法时需要其他类的对象参与完成
public class Cup {
private int cno; //编号
private String color; //颜色
private double capacity;//容量
}
class People {
public void p(String msg){
System.out.println(msg);
}
public void drink(Cup c){
}
}
继承
继承是面向对象语言的三大特征之一,通过继承关系可以实现方法和属性的复用,从而提高类的可扩展性,子类继承父类之后,可以不受限制的使用父类中的非私有(private)元素继承语法:
class A extends B{
}
public class Animal{
public void bark(){
System.out.println("emmmmmmm........");
}
}
public class Dog extends Animal{
public void eat(){
System.out.println("吃骨头");
}
}
public class Test{
public static void main(String[] args){
Dog d = new Dog();
d.eat();
//Dog对象除了可以调用自身的eat方法外还能调用父类的bark方法
d.bark();
}
}
继承注意事项
- java只能存在单继承,即:一个子类只能有一个直接父类
- 可以通过多重继承的方式实现多个父类方法复用
- java中的类可以同时被多个子类继承
- 子类继承父类后可以使用父类中的方法和属性,但是构造器不允许继承
- 在构造子类对象时,先调用父类构造器
访问权限
关于访问修饰符:
对外部类只能使用public或者默认的方式修饰,不予许使用private或者protected(内部类除外)
类,方法常用public修饰
属性常用private修饰
继承关系中方法常用protected,public修饰
多态实现策略-方法的重写(Override)
在某些情况下父类中的方法不一定能够完全满足子类需求,此时,子类中可以通过对父类的方法覆盖从而完成另一种方法实现,这个操作就称之为方法重写(override)
public class Animal{
public void bark(){
System.out.println("emmmmm.....");
}
}
public class Dog extends Animal{
//当父类方法不能完全满足子类需求时可以通过重写的方式对父类方法覆盖
@Override
public void bark(){
System.out.println("汪汪汪....");
}
}
方法重写
- 方法的重写发生在存在继承关系的两个类中子类
- 子类在重写方法时方法名称必须保持与父类一致(包括大小写)
- 子类重写父类方法时返回值类型必须保持跟父类一致
- 子类重写父类方法时参数列表必须保持与父类方法参数列一致
- 子类重写父类方法时,方法的访问权限范围不能小于父类方法