多肽

多态性 : 一种事物的多种形态

多态性的体现:
1.广义上 : ①方法的重载和重写 ②子类对象的多态性

2.狭义上 :①子类对象的多态 性

子类对象的多态性 : 父类的引用指向子类的对象 (Person p = new Student())

多态使用的前提 : ①要有继承关系 ②要有方法的重写

一个对象的实例:Man m = new Man();
m就是这个对象的实例

public static void main(String[] args) {
		
		//1.本态
		Man man = new Man();
		man.say();
		man.smoking();
		
		//2.子类对象的多态性
		Person women = new Women(); //向上转型
		//虚拟方法调用(动态绑定)
		women.say();
		//编译看左边,运行看右边
//		p.shopping(); 不能调用
		
		//3.使用多态的前提
		System.out.println("-----------------------------");
		//多态使用的前提 : ①要有继承关系  ②要有方法的重写
		Person p2 = new Man();
		p2.say();
		
		//4.思考 ? 属性具有多态性吗? -- 属性不具备多态性
		System.out.println(p2.name);
		
		//5.如何调用子类对象特有的属性和方法
		//向下转型 (为了调用子类对象中特有的属性和方法)
		System.out.println("-----------------------------");
		Man m = (Man)p2;
		System.out.println(m.isPlay);
		m.smoking();
		//注意 : 类型转换异常 : women对象本身就是一个Women类的对象 强转成 Man肯定不行
//		Man Man = (Man)women;
//		man.smoking();
//		Women w = (Women)p2;
//		w.shopping();
		
		/*
		 * 6. instanceof
		 *    a instanceof A : a对象是否是类A的一个实例,如果是返回true反之返回false;
		 *    
		 *    a instanceof A 结果为true
		 *    a instanceof B 结果为true
		 *    那么A和B存在继承关系
		 */
		System.out.println("--------------------------------------");
		Person p3 = new Man();
		if(p3 instanceof Women){
			Women w2 = (Women) p3;
			w2.shopping();
		}else{
			System.out.println("我不是一个女人");
		}
		
		Creature c = new Person();
		if(c instanceof Man){
			System.out.println("is a man");
		}
		
		if(c instanceof Person){
			System.out.println("is a person");
		}
		
		if(c instanceof Creature){
			System.out.println("is a creature");
		}
		
		System.out.println("------------------------------------------");
		
		Creature c2 = new Man();
		c2.say();
		Person p = (Person)c2;
		p.say();
		
		System.out.println("-----------------------------------------");
		//常见问题
		/*
		 * 类型转换异常
		Object obj = new String("aaaa");
		Man m3 = (Man)obj;
		*/
	}



public class Man extends Person {

	String name = "man";
	boolean isPlay = true;
	
	@Override
	public void say() {
		System.out.println("男人说话恶狠狠");
	}
	
	public void smoking(){
		System.out.println("男人不抽烟,女人不喜欢");
	}
}


public class Women extends Person {

	@Override
	public void say() {
		System.out.println("女人说话娇滴滴");
	}
	
	
	public void shopping(){
		System.out.println("女人没钱也要买买买");
	}
}

public class Person extends Creature {

	String name = "person";
	
	public void say(){
		System.out.println("人说话了");
	}
}


public class Creature {

	public void say(){
		System.out.println("生物说话了");
	}
}

你可能感兴趣的:(java基础)