多态

 

多态的前提

  1. 有子父类的继承关系(或者接口中的实现关系)
  2. 有方法的重写
  3. 父类的引用指向子类的对象(或者接口中的引用指向实现类中的对象)

多态的含义:

         对象的多态性:同一个物体,可以有多个名称;java中,同一个对象,可以有不同类型的引用指向这个对象。本质:同一个事物,有多种称谓和描述

        引用的多态性:同一个名称,可以表达多种物体;java中,同一个引用,可以指向不同的子类对象。本质:同一个描述和称谓,可以表达不同种类的事物

代码示例:基于接口

package com.pack.polymophic;

public class Fu {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.cry();//maoku
        System.out.println(animal.name);//dongwu
//向上转型
        Cat cat = (Cat) animal;
        System.out.println(cat.name);//mao
        System.out.println(cat.i);
    }
}

class Animal{
    static final  String name = "dongwu";
    final int i = 10;
    public   void  cry(){
        System.out.println("动物哭");
    }
}

class Cat extends Animal{
     //String name = "mao";
//    @Override    2子类可以继承父类的静态方法,但静态方法不能再子类重写
    public  void cry(){
        System.out.println("mao哭");
    }
    public void jump(){
        System.out.println("跳");
    }
}

基于继承:

package com.pack.polymophic;

public class Fu {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.cry();//maoku
        System.out.println(animal.name);//dongwu
//向上转型
        Cat cat = (Cat) animal;
        System.out.println(cat.name);//mao
        System.out.println(cat.i);
    }
}

class Animal{
    static final  String name = "dongwu";
    final int i = 10;
    public   void  cry(){
        System.out.println("动物哭");
    }
}

class Cat extends Animal{
     //String name = "mao";
//    @Override    2子类可以继承父类的静态方法,但静态方法不能再子类重写
    public  void cry(){
        System.out.println("mao哭");
    }
    public void jump(){
        System.out.println("跳");
    }
}

 

多态中的静态方法访问注意事项:

  1. 编译看=左边,运行看=左边;
    package com.pack.polymophic;
    
    public class Demo05 {
    
        public static void main(String[] args) {
            Animal1 animal1 = new Dog();
            animal1.getName();
    
            Animal1 a = null;
            a.getName();
    
            Animal1.getName();
    
            Dog.getName();
        }
    }
    
    class Animal1{
    
        public static void getName(){
            System.out.println("父类的静态方法");
        }
    }
    
    class Dog extends Animal1{
        public static void getName(){
            System.out.println("子类中的静态方法");
        }
    }

    运行结果:

    
    父类的静态方法
    父类的静态方法
    父类的静态方法
    子类中的静态方法
    
    Process finished with exit code 0

    总结;

    1. 静态变量:加上static关键字的变量,可以不随着对象的变化而变化         
    2.      静态变量相对于当前类型,总是不变,有固定的值;
    3.                 非静态变量相对于当前类型,会发生变化
    4.         静态方法:加上static关键字的方法,不会随着子类对象的不同,而运行不同内容
    5.                 相对于顶层父类,总是不变
    6.            非静态方法相对于顶层父类,可以发生变化
    7. 静态与多态无关

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值