【Thinking in Java】七:多态

[b]1 向上转型[/b]
写一个方法,它仅接收基类作为参数,而不是那些特殊的导出类,也就是说编写的代码只与基类打交道,这正式多态所允许的。

简单例子:


class Cycle {
private String name = "Cycle";
public static void travel(Cycle c) {
println("Cycle.ride() " + c);
}
public String toString() {
return this.name;
}
}

class Unicycle extends Cycle {
private String name = "Unicycle";
public String toString() {
return this.name;
}
}

public class Biking {
public static void ride(Cycle c) {
c.travel(c);
}
public static void main(String[] args) {
Unicycle u = new Unicycle();
ride(u);
}


[b]二 多态实现[/b]

一个方法调用和一个方法主体关联起来被称作绑定。
编译时,无法知道父类引用指向子类对象,Java解决的方法是动态绑定,在运行时根据对象的类型进行绑定,后期绑定机制,需要在对象中存有某种‘类型信息’。

2.1多态不支持私有方法

class Father{
private void v(){
System.out.println("super v");
}
public static void main(String[] args) {
Father f = new Son();
f.v();
}
}

class Son extends Father{
private void v(){
System.out.println("son v");
}
}


[color=red]output--> super v[/color]

2.2 多态不支持域和静态方法


class Father{
public int field = 0;
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.field);
}
}

class Son extends Father{
public int field = 1;
}


[color=red]output--> 0[/color]


静态方法这个 大家可以参考上面的私有方法改写试一下。

静态方法是与类,而并非与单个的对象关联的。

[b]三 多态与构造器[/b]


class Father{
public Father(){
System.out.println("123");
}

}

class Son {
public Son(){
System.out.println("1234");
}

{
System.out.println("dksjk");
}
private Father f= new Father();
static{
System.out.println("222");
}
public static void main(String[] args) {
new Son();
}
}


[color=red]output--> 222 dksjk 123 1234[/color]
代码示例中没有继承,但是通过demo可以看出

如有继承 ,先调用基类

类中的调用顺序为 静态代码块 -->按声明顺序调用成员初始化 -->构造函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值