zoukankan      html  css  js  c++  java
  • Java里的多态

    Java里的多态

    多态是同一个行为具有多个不同表现形式或形态的能力。

    在Java中,多态的表达式为Father f = new Son(),其中Father类为Son类的父类。f可以调用父类中的所有方法,当子类把父类中的方法重写之后,子类就会调用重写之后的方法。

    public class Person {	//父类
        public void run(){	//父类方法
            System.out.println("Person");
        }
    }
    
    public class Student extends Person {	                  //子类
        @Override
        public void run() {					//重写父类的run()
            System.out.println("Student");
        }
        public void eat(){					//子类自己的方法
            System.out.println("tomato");
        }
    }
    
    public class Application {		         //测试类
        public static void main(String[] args) {
            Student s1 = new Student();		//子类自己实例化
            Person s2 = new Student();		//Person为Student父类 实现多态
            Object s3 = new Student();		//Object是所有类的父类  实现多态
            s1.run();
            s2.run();
        	s1.eat();
        //	s2.eat();	//报错(找不到该方法)		//s2是多态的得到实际为父类对象,故没有子类方法
        }
    }
    

    运行结果:

    运行结果

    多态的注意事项:*

    1.多态只是方法的多态,属性没有多态。
    2.多态是父类和之类之间的联系,如果强制没有没有联系的类使用多态,会报类型转换异常 ClassCastException
    3.多态的条件:两个类之间要有继承关系,方法要重写(不重写无意义)父类引用指向之类对象
    

    方法不能重写的几种情形:

    方法不能被重写的几种情形:
        1.被static修饰 为类方法不能被重写
        2.被final修饰  为常量
        3.被private修饰  private修饰的方法为私有方法,也不能重写
    

    补充:

    ​ Java关键字instanceof只能用在两个有关系的类做比较,当使用在毫无联系的类作比较时会爆红。

    System.out.println(s2 instanceof Student);//true	本类
    System.out.println(s2 instanceof Teacher);//false	Teacher为Person类的子类,与Student无关
    System.out.println(s2 instanceof Person);//true		Person为Student的父类
    System.out.println(s2 instanceof Object);//true		Object为所有类的父类
    System.out.println(s2 instanceof String);//false	String类与Student没有关系
    
    刚刚参加工作,很有很多不懂不会的,发现错误,欢迎指正,谢谢!
  • 相关阅读:
    转换方法
    数组去重
    js常见兼容
    封装cookie
    常用函数封装
    手绘 代码
    Python变量和数据类型,类型转换
    语句块的概念及注释符的使用
    ipython和pip,模块安装方法
    第一个python程序
  • 原文地址:https://www.cnblogs.com/xd-study/p/12921798.html
Copyright © 2011-2022 走看看