回归java1-有关面向对象-多态和final


《java从小白到大牛》

回归java,自我小笔记

java有关面向对象

[public][abstract|final] class className [extend superclassName][implements interfaceNameList] {

}

封装性与访问控制

java类成员的访问控制

控制等级同一个类同一个包不同包的子类不同包非子类
私有Yes
默认YesYes
保护YesYesYes
公有YesYesYesYes

private、protected、public

访问成员方式:

  1. 调用。通过类或对象调用它的成员。
  2. 继承。子类继承父类的成员变量或方法。

static

静态变量和静态方法

static double interestRate = 0.0668;

public static double interestBy(double amt) {
    return interestRate * amt;
}

静态方法可以访问静态变量和其他静态方法。(静态方法中不能访问实例成员变量)
(实例方法可以访问实例变量、其他实例方法、静态变量和静态方法)
通过类名或实例名调用静态变量或静态方法。

静态变量初始化:

  1. 声明同时初始化。
  2. 需要计算才能初始化,使用静态代码块。

静态代码块

静态代码块在类第一次加载时执行,并只执行一次。

static double interestRate;

static {
    interestRate = 0.0668;
}

多态

多态

多态:同一方法,不同的具体实现方式。

发生多态三个前提条件:

  1. 继承。多态发生在子类和父类之间。
  2. 覆盖。子类覆盖了父类的方法。
  3. 声明的变量类型是父类类型,但实例指向子类实例。
public class Person {}
public class Worker extends Person {}
public class Student extends Person {}

Person p1 = new Worker(); // p1是父类类型,指向子类实例,发生多态

引用类型检查

p1 instanceof Person

引用类型转换

只发生于同一棵继承层次树中的应用类型。

对象描述Person类型Worker类型Student类型
类型:Person
实例:Student
支持不支持支持(向下转型)
类型:Person
实例:Worker
支持支持(向下转型)不支持
类型:Person
实例:Person
支持不支持不支持
类型:Student
实例:Student
支持(向上转型)不支持支持
类型:Worker
实例:Worker
支持(向上转型)支持不支持

向下转型(downcast):将父类引用类型变量转换为子类类型。是自动的。
向上转型(upcast):将子类引用类型变量转换为父类类型。需要强制转换。

Person p2 = new Worker();

// Student p11 = (Student) p2; // 运行时异常。不能确定实例是哪一种类型时,判断一下
if (p2 instanceof Student) {
    Student p11 = (Student) p2;
}

final

final修饰的变量为常量,只能赋值一次。
final修饰的局部变量,使用前必须赋值。
final修饰的成员变量在声明时没有赋值的(空白final变量),必须在构造方法或静态代码块中初始化。

final修饰的类不能被继承。(出于设计安全的目的)

常量,只能赋值一次。
final修饰的局部变量,使用前必须赋值。
final修饰的成员变量在声明时没有赋值的(空白final变量),必须在构造方法或静态代码块中初始化。

final修饰的类不能被继承。(出于设计安全的目的)

final修饰的方法不能被子类覆盖。(出于设计安全的目的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值