Java基础_多态

1.什么是多态

父类  名称 = new  子类
动物  狗 =new  狗();
Animal dog=new dog();

多态:指对象有多种形态,对象可以存在不同的形式

多态的前提:可以是继承关系(接口和实现类)

 

package HelloWorld;
//动物吃食物
class Anima{
 public void eat() {
	 System.out.println("吃食物");
}
}
//狗继承动物,吃骨头
class Dog extends Anima{
	public void eat() {
		System.out.println("吃骨头");
	}
}
//猫继承动物,吃鱼
class Cat extends Anima{
	public void eat() {
		System.out.println("吃鱼");
	}
}
//人喂食
class Person {
	public void feed(Anima anima) {
		anima.eat();
		System.out.println("feeding····");
	} 
}
public class AnimalDome {
	public static void main(String[] args) {
		Anima dog=new Dog();
		Anima cat=new Cat();
		Person p=new Person();
		p.feed(cat);
		System.out.println("-----------------");
		p.feed(dog);
	}
}

2.多态的调用

前提:必须存在多态情况

(1)假设存在父类 SuperClass,子类:SubClass。方法:doWork

         情况1:doWork存在于SuperClass

package HelloWorld;

class SuperClass{
	public void doWork() {
		System.out.println("SuperClass.doWork");
	}
}
class SubClass extends SuperClass{
	
}
public class AnimalSuperDome {
	public static void main(String[] args) {
		SuperClass clz= new SubClass();//多态
		clz.doWork(); // SuperClass.doWork
	}
}

        情况2;doWork存在于SubClass

package HelloWorld;

class SuperClass{
	public void doWork() {
		System.out.println("SuperClass.doWork");
	}
}
class SubClass extends SuperClass{
	public void doWork(){
		System.out.println("SubClass.doWork");
	}
}
public class AnimalSuperDome {
	public static void main(String[] args) {
		SuperClass clz= new SubClass();//多态
		clz.doWork(); // SubClass.doWork
	}
}

        情况3;编译报错

package HelloWorld;

class SuperClass{
	
}
class SubClass extends SuperClass{
	public void doWork(){
		System.out.println("SubClass.doWork");
	}
}
public class AnimalSuperDome {
	public static void main(String[] args) {
		SuperClass clz= new SubClass();//多态
		clz.doWork(); // SubClass.doWork
	}
}

      情况4:静态方法调用(static)SuperClass.doWork

package HelloWorld;

class SuperClass{
	public static void doWork() {
		System.out.println("SuperClass.doWork");
	}
}
class SubClass extends SuperClass{
	public static  void doWork(){
		System.out.println("SubClass.doWork");
	}
}
public class AnimalSuperDome {
	public static void main(String[] args) {
		SuperClass clz= new SubClass();//多态
		clz.doWork(); // SuperClass.doWork,实质SuperClass.doWork
	}
}

3.引用类型转换

基本类型强转:大转小

byte b=1; //1个字节
int i=b;//4个字节
short s=(short)i;//2个字节

引用类型转换的大小是指父类与子类的关系

自动类型转换:把子类对象赋给父类变量(多态)

Animal a=new Dog();

Object是所有类的根类

Object obj=new Dog();

强制类型转换:把父类强转成子类变量

4.运算符instanceof运算符:判断该对象是否是某一个类实现

boolean 类型=(对象A instanceof 类B)
package HelloWorld;
class Anima{
 public void eat() {
	 System.out.println("吃食物");
}
}
class Dog extends Anima{
	public void eat() {
		System.out.println("吃骨头");
	}
}
class Cat extends Anima{
	public void eat() {
		System.out.println("吃鱼");
	}
}
class Person {
	public void feed(Anima anima) {
		anima.eat();
		System.out.println("feeding····");
	} 
}
public class AnimalDome {
	public static void main(String[] args) {
		Anima dog=new Dog();
		Anima cat=new Cat();
		Person p=new Person();
		p.feed(cat);
		System.out.println("-----------------");
		p.feed(dog);
		
		System.out.println(cat instanceof Anima); //true
		System.out.println(cat instanceof Dog);   //false
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值