Java 辅助概念(多态性)

·多态的依赖:方法的覆写

·方法的多态性:

        |-方法的重载:同一个方法名称,根据传入参数的类型及个数不同执行不同的方法体;

        |-方法的覆写:同一个方法名称,根据子类的不同,实现不同的功能。

·对象的多态性:发生在继承关系的类中,子类和父类之间的转换

        |-向上转型(自动完成)父类 父类对象    =    子类实例;

        |-向下转型(强制完成)子类 子类对象    =    (子类)父类实例;

范例1:向上转型

class A {
	public void print() {
		System.out.println("A类print()方法");
	}
}

class B extends A {
	public void print() {
		System.out.println("B类print()方法");
	}
}

public class Demo01 {
	public static void main(String[] args) {
		A a = new B();
		a.print();

	}

}

==============分割线==============

范例2:向下转型

class A {
	public void print() {
		System.out.println("A类print()方法");
	}
}

class B extends A {
	public void print() {
		System.out.println("B类print()方法");
	}
}

public class Demo01 {
	public static void main(String[] args) {
		A a = new B();
		B b = (B)a;
		b.print();
	}
}

==============分割线==============

范例3:向上转型

class A {
	public void print() {
		System.out.println("A类print()方法");
	}
}

class B extends A {
	public void print() {
		System.out.println("B类print()方法");
	}
}

class C extends A {
	public void print() {
		System.out.println("C类print()方法");
	}
}

public class Demo01 {
	public static void main(String[] args) {
		A a1 = new B();
		A a2 = new C();
		a1.print();
		a2.print();
	}
}

==============分割线==============

范例4:向下转型

·向下转型:父类要调用子类自己的特殊方法

class A {
	public void print() {
		System.out.println("A类print()方法");
	}
}

class B extends A {
	public void print() {
		System.out.println("B类print()方法");
	}

	public void funB() {
		System.out.println("B类的funB()方法");
	}
}

public class Demo01 {
	public static void main(String[] args) {
		A a = new B();
		B b = (B) a;
		b.funB();
	}
}

==============分割线==============

范例5:向下转型

class A {
	public void print() {
		System.out.println("A类print()方法");
	}
}

class B extends A {
	public void print() {
		System.out.println("B类print()方法");
	}

	public void funB() {
		System.out.println("B类的funB()方法");
	}
}

public class Demo01 {
	public static void main(String[] args) {
		fun(new B());// 向上转型
	}

	public static void fun(A a) {// 统一参数
		// 调用个性化特征
		B b = (B) a;// 因为要调用子类的特殊方法
		b.funB();
	}
}

==============分割线==============

为了保证转型的顺利,使用关键字 instanceof

范例5:对象  instanceof 类 返回boolean值

class A {
	public void print() {
		System.out.println("A类print()方法");
	}
}

class B extends A {
	public void print() {
		System.out.println("B类print()方法");
	}

	public void funB() {
		System.out.println("B类的funB()方法");
	}
}

public class Demo01 {
	public static void main(String[] args) {
		A a = new B();
		System.out.println(a instanceof A);
		System.out.println(a instanceof B);
		if (a instanceof B) {
			B b = (B) a;
			b.print();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值