zoukankan      html  css  js  c++  java
  • java 子类继承父类 -- 重写、覆盖

    class Foo {  
        public int a;  
        
        public static final String str = "foo";
      
        public Foo() {  
            a = 3;  
        }  
      
        public int addFive() {  
            a = a + 5;  
            return a;  
        }  
        
        public int addFiveByGetA() {  
            a = getA() + 5;  
            return a;  
        }  
      
        public int getA() {  
            return a;  
        }  
        
        public String getStr() {  
            return str;  
        }
        
        
        public String addStr() {  
            return getStr();  
        } 
        
        
        
    }  
      
    public class Bar extends Foo {  
        public int a;  
        
        public static final String str = "bar";
      
        public Bar() {  
            a = 8;  
        }  
      
    //    public int addFive() {  
    //        a += 5;  
    //        return a;  
    //    }  
        
        public int getA() {  
            return a;  
        } 
        
        public String getStr() {  
            return str;  
        }
    
        public static void main(String[] args) {  
            Foo foo = new Bar();  
            Bar bar = new Bar();  
            //调用的是子类中的方法  
            System.out.println(foo.getA());  
            
            //调用的是子类中的方法  
            System.out.println(bar.getA());
            
            //直接调用父类中的a  
            System.out.println("Value: " + foo.a); 
            
          //直接调用子类中的a  
            System.out.println("Value: " + bar.a); 
            
            //调用的是父类中的方法  
            System.out.println(foo.addFive());  
            
            //调用的是父类中的方法  
            System.out.println(bar.addFive());  
            
          //调用的是子类中的方法  
            System.out.println(foo.addFiveByGetA());  
            
            //调用的是子类中的方法  
            System.out.println(bar.addFiveByGetA());  
            
          //直接调用父类中的str 
            System.out.println("str: " + foo.str);  
            
            //直接调用子类中的str 
            System.out.println("str: " + bar.str);  
            
          //调用的是父类中的方法  
            System.out.println(bar.getStr());  
              
        }  
    }  

    运行结果:

    8
    8
    Value: 3
    Value: 8
    8
    8
    13
    13
    str: foo
    str: bar
    bar

    其实Java继承中,成员变量(包括静态变量,实例变量,常量)没有覆盖(override)一说,应该叫隐藏(hidden)。override只针对方法来说的。

    当成员变量为private时,其他类不能直接访问到,只能通过非private方法 访问,因此直接按照分析方法的思路分析,如该方法是否有覆盖,该方法是否是静态方法。

    当成员变量为static时,即静态变量,在类加载过程中就分配了内存,因此只与访问的变量类型有关。


    只要记住:一个男人肯定也是人,一个人却不一定是男人的道理,就非常容易理解父类和子类之间的转换关系了。
    -Object类-
    Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类就默认继承Object类。因此,Object类是Java类层中的最高层类,是所有类的超类。Java中任何一个类都是它的子类,由于所有的类都是由Object衍生出来的,所以Object的方法适用于所有类。


  • 相关阅读:
    Linked List Cycle leetcode java (链表检测环)
    Remove Duplicates from Sorted List II leetcode java
    Remove Duplicates from Sorted List leetcode java
    Merge Two Sorted Lists leetcode java
    Swap Nodes in Pairs leetcode java
    Median of Two Sorted Array leetcode java
    阿里云最便宜的四种域名注册
    nohup和&后台运行,进程查看及终止
    ipv6转ipv4 NAT64与DNS64基本原理概述
    ros使用pppoe拨号获取ipv6,并且下发IPV6的dns到客户机win7
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959577.html
Copyright © 2011-2022 走看看