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
}
}