栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java多态

多态

父类

package oop.Demo05;

public class Person {

    public void run(){
        System.out.println("run");
    }
}

子类

package oop.Demo05;

public class Student extends Person{

}

main

package oop;

import oop.Demo05.Person;
import oop.Demo05.Student;

//规范一个项目只存在一个main方法
public class Application {
    public static void main(String[] args) {

        //一个对象的实际类型是确定的
        //new Student();
        //new Person();

        //可以指向的引用类型就不确定了:父类的引用指向子类的类型
        Student s1 = new Student();
        Person s2 = new Student();
        Object s3 = new Student();

        s2.run();//结果为 run
                //虽然 new 的是 Student 但是依然走父类的方法
                //因为子类继承了父类的全部方法
    }
}
子类重写父类方法后

父类

package oop.Demo05;

public class Person {

    public void run(){
        System.out.println("run");
    }
}

子类

package oop.Demo05;

public class Student extends Person{

    @Override
    public void run() {
        System.out.println("son");
    }

    public void eat(){
        System.out.println("eat");
    }

}

main

package oop;

import oop.Demo05.Person;
import oop.Demo05.Student;

//规范一个项目只存在一个main方法
public class Application {
    public static void main(String[] args) {

        //一个对象的实际类型是确定的
        //new Student();
        //new Person();

        //可以指向的引用类型就不确定了:父类的引用指向子类的类型
        Student s1 = new Student();//子类指向的引用;Student 能调用的方法都是自己的或者继承父类的
        Person s2 = new Student();//父类指向的引用;Person 父类型,可以指向子类,但是不能调用子类独有的方法
        Object s3 = new Student();

        s2.run();//son
                //子类重写了父类的方法,执行子类的方法
        s1.run();//son

        //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
        s2.eat();//直接去调会报错,因为 s2 的类型是 Person ,但是 Person 里面是没有 eat 方法的,所以调用不了
        		 //如果 Student 类和 Person类 里面都有 eat 方法的情况下,
        		 //只要子类没有重写父类,那么它就调用父类的,如果子类重写父类,那么就调用子类
        s1.eat();
    }
}
注意

在IDEA中输入 s2.eat(); 会出现如下状况:

((Studnt) s2).eat(); //强制转换,把 s2 这个 Person 类型强制转换为 Student 类型,高类型转换为低类型
多态注意事项
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系  不能乱转换  类型转换异常 ----> ClassCastException (如果出现这个就是父子之间转换出现问题)
3.存在条件:继承关系,方法需要重写,父类的引用指向子类对象   father f1 = new son();
    比如 s1.run();
		s2.run();//都是 run 到底执行谁的,这个就得看类型来决定, s1 是Student, s2 是Person;当两个类型都有的时候就执行子类的
//有些方法不能被重写比如:
	//static 方法,这个是属于类的,不属于实例
	//final 是常量的,被 final 修饰了就无法去重写,无法改变,因为他在常量池里面
	//private 这个是私有的方法,也不能被重写,所以更不能进行多态
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号