java面向对象之多态

简介: 面向对象的多态:(1)方法的重载与覆写(2)对象的多态性(可以应用于接口中)对象的多态性1、向上转型:子类对象→父类对象   ,程序会自动完成,格式是:父类   父类对象 = 子类实例;2、向下转型:父类对象→子类...
面向对象的多态:
(1)方法的重载与覆写
(2)对象的多态性(可以应用于接口中)
对象的多态性
1、向上转型:子类对象→父类对象   ,程序会自动完成,格式是:父类   父类对象 = 子类实例;
2、向下转型:父类对象→子类对象,使用强制手段,必须明确指出要转型的子类类型,格式:子类  子类对象 =(子类) 父类实例
向上转型程序1
package com.java.extend;


class A1 {
	public void fun1() {
		System.out.println("A1___fun1()");
	}


	public void fun2() {
		this.fun1();
	}
}


class B1 extends A1 {
	public void fun1() { // 覆写父类方法
		System.out.println("B1___fun1()");
	}


	public void fun3() {
		System.out.println("B1___fun3()");
	}
}


public class PloyDemo1 {


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B1 b = new B1(); // 实例化子类对象
		A1 a = b; // 向上转型关系
		/*
		 * 通过子类进行父类对象实例化操作的,则如果调用的方法fun1()被子类B1覆写过,则肯定调用被覆写的过的方法
		 * 因为操作的是父类对象,所以是无法找到子类中定义的新方法fun3()
		 */
		a.fun1(); // 子类被覆写过
		a.fun2();
		// a.fun3();//子类的新方法,找不到的


	}


}


向下转型程序2
package com.java.extend;


class A111 {
	public void fun1() {
		System.out.println("A1___fun1()");
	}


	public void fun2() {
		this.fun1();
	}
}


class B111 extends A111 {
	public void fun1() { // 覆写父类方法
		System.out.println("B1___fun1()");
	}


	public void fun3() {
		System.out.println("B1___fun3()");
	}
}

public class PloyDemo3 {


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A111 aa = new A111();// 实例化父类对象
		B111 b111 = (B111) aa;// 向下转型
		b111.fun1();
		b111.fun2();
		b111.fun3();


	}


}


以上程序会出现异常: 
Exception in thread "main" java.lang.ClassCastException:com.java.extend.A111 cannot be cast to com.java.extend.B111 at com.java.extend.PloyDemo3.main(PloyDemo3.java:28)出现异常,在对象转换时发生,
如果两个没有关系的类之间发生转换关系,肯定会发生该异常,类比Demo2,若想要产生向下转型,则必须先产生一个向上转型的关系“
A11 aa = new B11();”,表示建立关系
 



package com.java.extend;


class A11 {
	public void fun1() {
		System.out.println("A1___fun1()");
	}


	public void fun2() {
		this.fun1();
	}
}


class B11 extends A11 {
	public void fun1() { // 覆写父类方法
		System.out.println("B1___fun1()");
	}


	public void fun3() {
		System.out.println("B1___fun3()");
	}
}


public class PloyDemo2 {


	public static void main(String[] args) {
		// TODO Auto-generated method stub


		A11 aa = new B11();// 向上转型
		B11 b11 = (B11) aa;// 向下转型
		b11.fun1();
		b11.fun2();
		b11.fun3();


	}


}





相关文章
|
7天前
|
存储 安全 Java
Java面向对象最新超详细总结版!
Java面向对象最新超详细总结版!
25 7
Java面向对象最新超详细总结版!
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
3天前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
16 3
|
3天前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
16 2
|
5天前
|
Java 编译器 C++
Java 多态
5月更文挑战第3天
|
13天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
11 0
|
14天前
|
Java
java使用面向对象实现图书管理系统
java使用面向对象实现图书管理系统
|
14天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
14天前
|
机器学习/深度学习 Java Python
Java面向对象知识体系---基础版
Java面向对象知识体系---基础版
|
18天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类