多态与继承

控制访问权限

关键字权限
public允许所有途径的访问
default允许同一个类,同一个包的访问
protected允许同一个类,同一个包和子类访问
private只有在同一类可以访问
  • 对于类方法,用private关键字限定则相当于一个final方法

组合

指一个类中包含有其他类的引用,在初始化时这个引用会被初始化为null,如果想初始化这些引用,可以在下列位置进行:

  1. 在定义对象的地方
  2. 在类的构造器中
  3. 在要使用这些对象以前
  4. 使用实例初始化
class Wheel{
    Wheel(){
        System.out.println("Wheel Constructor");
    }
}

class Engine{
   Engine(){
       System.out.println("Engine Constructor");
   }
}

class Car {
    private Wheel wheel;
    private Engine engine;
    Car(){
        engine = new Engine();
        wheel = new Wheel();
        System.out.println("Car Constructor");
    }
}
public class TestCombination {
    public static void main(String[] args) {
        Car car = new Car();
    }
}

与C++不同,组合的构造顺序与调用构造方法的调用顺序相同。

Engine Constructor
Wheel Constructor
Car Constructor

如果不在构造方法里显式调用构造方法,则会按声明顺序初始化

继承

继承语法

继承声明是在类主体的花括号左边花括号之前,书写后面跟随基类关键字extends 实现的

class Student extends Person{}

基类初始化

class Art{
    Art(){
        System.out.println("Art Constructor");
    }
}

class Draw extends Art{
    Draw(){
        System.out.println("DRaw Constructor");
    }
}

class Cartoon extends Draw{}
public class TextExtends {
    public static void main(String[] args) {
        Cartoon cartoon = new Cartoon();
    }
}

当程序调用某一个类的对象时,JVM会先找到这个类的基类,然后执行初始化,并递归初始化所有的父类。所以,以上程序的执行结果为:

Art Constructor
DRaw Constructor

final关键字

  • 当final关键字后跟基本类型时,表示这是一个编译期常量,这个常量必须在定义时初始化
  • static后接final表示这个域只占据一块不能改变的空间,根据惯例,static final的域用大写字母表示并用下划线分隔
  • 当final 后跟一个对象的引用时,表示该引用不变,一旦指向一个对象,就无法改变指向另一个对象
  • 当final后跟一个方法时,表示该方法不能被重写
  • 当final后跟一个类时,表示该类不能被继承
  • Java允许空白final的用法,但空白的final必须在构造器中初始化
class Draw extends Art{
    private final int a;
    Draw(){
        a=100;
        System.out.println("DRaw Constructor");
    }
}

多态

向上转型

类似于C++,可以用一个父类的引用管理一个子类对象,但不同于C++的是,Java不需要使用virtual关键字标明参与多态的方法,类中所有public方法都能参与多态,都能被Override。Java的动态绑定(也称运行时绑定)会完成C++中用指针才能完成的操作,可以直接用父类引用调用子类方法。

限制

只有类中的普通方法(public)可以参与多态,private、final、static修饰的方法不可以参与多态。

构造顺序

  1. 调用基类构造器。这个步骤会一直递归下去,直到导出最底层的类。
  2. 按声明顺序调用成员的初始化方法
  3. 调用子类主体构造器

继承与组合

  1. 组合多用来表达“has”关系,比如车有轮子,发动机
  2. 继承多用来表达“is a”关系,比如学生 是一个人
  3. 当不清楚如何选择时,首选组合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值