码迷,mamicode.com
首页 > 编程语言 > 详细

java基础之多态的那些事儿

时间:2019-04-20 12:49:10      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:讲解   str   ace   访问   nbsp   color   cli   编译   xtend   

同一个对象在不同时刻体现出来的不同状态,叫多态

多态的前提:

             a.有继承或者实现关系。

             b.有方法重写。

             c.有父类或者父接口引用指向子类对象。

多态的分类:

        a:具体类多态

class Fu{
}
class Zi extends Fu{
}

Fu f = new Zi();

     b.抽象类多态

abstract class Fu{
}
class Zi extends Fu{
}

Fu f = new Zi();

        c.接口多态 

interface Fu{
}
class Zi implements Fu{
}

Fu f = new Zi();

多态中的成员访问特点:

1、成员变量:编译看左边,运行看左边(执行结果)

class Fu{
	public int num = 100;
}
class Zi extends Fu{
	public int num = 1000;
	public int num2 = 200;
}
public class DuoTai {
      public static void main(String[] args) {
    	 ///要父类引用指向子类对象,父 f = new 子(); 
    	  Fu f = new Zi();
    	  System.out.println(f.num);//100,执行的是左边父类
    	  ///System.out.println(f.num2);编译不通过,报错
      }
}

2、构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。子类的构造都会默认访问父类构造。

package Training;
class Fu{
	public Fu() {
		System.out.println("我是父类构造方法!!!");
	}
}
class Zi extends Fu{
	public Zi() {
		System.out.println("我是子类构造方法!!!");
	}
}
public class DuoTai {
      public static void main(String[] args) {
    	  new Zi();
      }
}
///默认先访问父类构造方法
技术图片
1 我是父类构造方法!!!
2 我是子类构造方法!!!
View Code

3、成员方法:编译看左边,运行看右边

class Fu{
	public void method() {
		System.out.println("我是父类成员方法!!!");
	}
}
class Zi extends Fu{
	public void method() {
		System.out.println("我是子类成员方法1!!!");
	}
	public void Zimethod() {
		System.out.println("我是子类成员方法2!!!");
	}
}
public class DuoTai {
      public static void main(String[] args) {
    	  Fu f = new Zi();
    	  f.method();
    	  ///f.Zimethod();编译不通过报错,父类不能使用子类特有的功能
      }
}
技术图片
1 我是子类成员方法1!!!
View Code

4、静态方法:编译看左边,运行看左边

class Fu{
	public static void method() {
		System.out.println("我是父类静态方法!!!");
	}
}
class Zi extends Fu{
	public static void method() {
		System.out.println("我是子类静态方法!!!");
	}
}
public class DuoTai {
      public static void main(String[] args) {
    	  Fu f = new Zi();
    	 f.method();
      }
}

 来自传智播客的刘意老师的经典讲解:

 

多态的问题理解:
	class 孔子爹 {
		public int age = 40;
		
		public void teach() {
			System.out.println("讲解JavaSE");
		}
	}
	
	class 孔子 extends 孔子爹 {
		public int age = 20;
		
		public void teach() {
			System.out.println("讲解论语");
		}
		
		public void playGame() {
			System.out.println("英雄联盟");
		}
	}
	
	//Java培训特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了
	//但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢?
	//然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹
	//向上转型
	孔子爹 k爹 = new 孔子();
	//到人家那里去了
	System.out.println(k爹.age); //40
	k爹.teach(); //讲解论语
	//k爹.playGame(); //这是儿子才能做的
	
	
	//讲完了,下班回家了
	//脱下爹的装备,换上自己的装备
	//向下转型
	孔子 k = (孔子) k爹; 
	System.out.println(k.age); //20
	k.teach(); //讲解论语
	k.playGame(); //英雄联盟
	

 

 

 

java基础之多态的那些事儿

标签:讲解   str   ace   访问   nbsp   color   cli   编译   xtend   

原文地址:https://www.cnblogs.com/zws-bugging/p/10732849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!