zoukankan      html  css  js  c++  java
  • java 子类重写函数的几个测试

    public class Test {
           public static void main (String[] args) {
               Animal h = new Horse();
               h.eat();  
           }
       }
    
       class Animal {
           public void eat(){
               System.out.println ("Animal is eating.");
           }
       }
      
       class Horse extends Animal{
           public void eat(){
               System.out.println ("Horse is eating.");
           }
           public void buck(){
           }
       }
    

      一个原则是:使用了什么引用,编译器就会只调用引用类所拥有的方法。如果调用子类特有的方法,如上例的h.buck(); 编译器会抱怨的(编译错误)。也就是说,编译器只看引用类型,而不是对象类型。

    下面是有关继承中重写的几个测试

    1.函数同等权限,父类引用,子类实例;

    public class HelloWorld{
    
         public static void main(String []args){
            Animal A = new Horse();
            A.eat();
         }
    }
    class Animal
    {
        public void eat()
        {
            System.out.println("A is eating");
        }
    }
    class Horse extends Animal
    {
        public void eat()
        {
            System.out.println("B is eating");
        }
    }
    

      编译执行

    sh-4.3$ javac HelloWorld.java                                                                                                            
    sh-4.3$ javac HelloWorld.java                                                                                                            
    sh-4.3$ java -Xmx128M -Xms16M HelloWorld                                                                                                 
    B is eating 
    没有问题
    2.函数同等权限,子类引用,父类实例
    public class HelloWorld{
    
         public static void main(String []args){
            //Animal A = new Horse();
            Horse A = new Animal();
            A.eat();
         }
    }
    class Animal
    {
        public void eat()
        {
            System.out.println("A is eating");
        }
    }
    class Horse extends Animal
    {
        public void eat()
        {
            System.out.println("B is eating");
        }
    }
    

      编译报错:

    sh-4.3$ javac HelloWorld.java                                                                                                            
    HelloWorld.java:5: error: incompatible types: Animal cannot be converted to Horse                                                        
            Horse A = new Animal();                                                                                                          
                      ^                                                                                                                      
    1 error  
    向下转型不安全,子类引用不能指向父类对象;
    3.函数不同权限,父类引用,子类实例
    public class HelloWorld{
    
         public static void main(String []args){
            Animal A = new Horse();
            //Horse A = new Animal();
            A.eat();
         }
    }
    class Animal
    {
        protected void eat()
        {
            System.out.println("A is eating");
        }
    }
    class Horse extends Animal
    {
        public void eat()
        {
            System.out.println("B is eating");
        }
    }
    

      

                                                                                       

    编译执行
    sh-4.3$ javac HelloWorld.java                                                                                                            
    sh-4.3$ java -Xmx128M -Xms16M HelloWorld                                                                                                 
    B is eating
    没有问题,重写的权限要比父类函数的权限相等或更宽。
  • 相关阅读:
    一个简易邮件群发软件设计与实现
    一种公众号回复关键词机制
    Oracle 异常 ORA-01861: literal does not match format string(字符串格式不匹配)
    Linux使用命令
    IDEA在引入Maven项目后Dependencies中在出现红色波浪线
    MySQL安装Write configuration file 提示:configuration file template my.ini Error code-1
    redis批量删除键的操作
    在WINDOWS服务器下设置MARIADB自动备份的方法
    xampp3.2下mysql中文乱码终极解决方案
    CentOS 7虚拟机下模拟实现nginx负载均衡
  • 原文地址:https://www.cnblogs.com/TaoChiangBlog/p/6398052.html
Copyright © 2011-2022 走看看