java三大特性之多态

多态

何为多态?

     通俗的讲是引用的多种形态,往往是由引用实际指向的对象决定。方法有多态,属性没有多态。

静态(编译期间)多态 :方法的重载,严格来说不算是多态的体现,只是增加了程序的灵活性。
动态(运行期间)多态 :重写和向上转型

多态的三要素?

  • 存在某种联系(继承类或者实现接口)
  • 方法的重写
  • 父引用指向子类对象

多态的体现?

向上转型

     子类重写父类方法,父类引用执行子类重写的方法;
     父类独有的方法,父类引用执行父类独有方法;
     子类独有方法,则不允许执行,否则需要强行向下转型,调用子类独有方法。

package hchang.demo.java.base.varscope;

/**
 * 父类
 */
public class Parent {
    public void eat(){
        System.out.println("parent eat");
    }
    protected void cost(){
        System.out.println("parent cost moneny");
    }
}



package hchang.demo.java.base.varscope;

/**
 * java 多态
 * 1、重写与重载
 * 2、向上转型 父类的引用执行子类的对象
 */
public class Son extends Parent{

    @Override
    public void eat() {
        System.out.println("son eat");
    }
    public void paly() {
        System.out.println("son paly");
    }
    public static void main(String[] args) {
        //向上转型  父类引用执行子类重写的方法,子类没有重写父类则不允许执行
        Parent parent = new Son();
        parent.eat();
        parent.cost();
        //向下转型
        ((Son) parent).paly();
    }
}

运行结果
son eat
parent cost moneny
son paly

方法重载和方法重载区别:

区别 重写 重载
方法列表 必须一样 必须不一样
返回类型 必须一样 可以不一样
访问修饰符 一定不能做更严格的限制(可以降低限制) 可以不一样

方法重写

     被重写的方法必须有@Overvide注解修饰,父类的final、static、private 修饰的方法不允许被重写,返回值类型(JDK7以后,被重写的方法返回值类型可以不同,但是必须是具有父子关系的)和形参都不能改变。即外壳不变,核心重写。

方法重载

/**
 * 1、重载的方法参数列表必须不一样
 * 2、返回值类型可以一样可以不一样
 * 3、修饰符可以不一样
 */
public class OverloadDemo {
    public void eat(String name,String age,String sex){

    }
    private String  eat(String name,String age,Integer s){
        return null;
    }
}

你可能感兴趣的:(java三大特性之多态)