zoukankan      html  css  js  c++  java
  • Java学习笔记-继承

    继承

    1.继承的作用:

    • 基本作用:子类继承父类
    • 主要(重要)作用:因为有了继承,才有了方法覆盖和多态

    2.继承的特性:

    • java只支持多继承,但是支持间接继承
    • 子类继承父类,除构造方法不能继承之外,剩下都可以继承,但是私有的属性无法在子类中直接访问,可以通过间接的手段访问
      • 这种继承:子类继承父类的方法,是将父类继承过来的方法归为自己所有,那么子类调用时不是父类的方法,而是它自己的方法。
    • 如果一个类没有显示的继承任何类,则默认继承Object类(Java继承树的根)

    3.什么时候继承?

    • 凡是采用“is a”能描述的,都可以继承
    • 在考虑两个类继承之前,先考虑两个类组合的效果
      • 例如: cat is Animal Dog is Animal

    4.继承的缺点:
    耦合度高,父类修改,子类受牵连

    例如:

    //如下将Student,Teacher泛化为Person类:
    public class Person{
        private String name;
        private int age;
        public Person(String name, int age){
            this.name = name;
            this.age = age;
        }
    	//置取方法
    	public void setName(String name){
    		this.name = name;
    	}
    	public String getName(void){
    		return this.name;
    	}
    	
        public void display(){
            System.out.println("姓名:" + name);
        }
    }
    
    
    Student类:
    public class Student extends Person{
        private double grade;
    
    	public Student(String name, int age, double grade){
            super(name, age);
            this.grade = grade;
        }
        public void display(){
            System.out.println("成绩: " + this.grade);
        }
    }
    
    
    public class ExtendsTest01{
    	public static void main(String[] args){
    		Student s = new Student("Li Si", 23, 100);
                    //getName()是子类从父类继承过来的方法
    		System.out.println("姓名:" + s.getName())
    	}
    }
    

    分析Java源码中的继承

    /** 
    * Object.java中
        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    */
    public class ExtendsTest02{
    	public static void main(String[] args){
    		//创建一个对象
                    ExtendsTest02 ts = new ExtendsTest02();
    		String retValue = ts.toString();
    		System.out.println(retValue);
    		//如果直接输出"引用"?
    		System.out.println(ts);
    		
    	}
    }
    

    分析:

    1. ExtendsTest02类默认继承Object类,所以是子类对象调用父类的实例方法。
    2. 输出结果"等同"看作调用对象在堆内存中的地址,是实际地址经过“哈希算法”计算出的十六进制地址
    3. 如果直接输出"引用"
    • println方法会先自动调用“引用.toString()”
    • 然后输出toString()方法的结果

    System.out.println

    public class Test{
    	//静态变量
    	static Student s = new Student();
    	
    	//入口
    	public static void main(String[] args){
    		//System.out.println("Hello");
    		//一样的结构
    		Test.s.exam();
    	}
    }
    class Student{
    	//实例方法
    	public void exam(void){
    		System.out.println("考试....");
    	}
    	
    }
    
  • 相关阅读:
    水晶苍蝇拍:微薄投资感悟摘录(四) (2012-04-03 14:11:01)
    水晶苍蝇拍:投资感悟(三)(手打,有删减)
    水晶苍蝇拍:投资感悟(二)(2011-12-27 08:17:54)
    leetcode -- String to Integer (atoi)
    leetcode -- Longest Palindromic Substring
    leetcode -- Longest Substring Without Repeating Characters
    leetcode -- Add Two Numbers
    QQ截图工具截取
    LUA学习笔记(第5-6章)
    Lua5.2 请求 luasocket 相关模块时的 multiple-lua-vms-detected
  • 原文地址:https://www.cnblogs.com/zy200128/p/12634397.html
Copyright © 2011-2022 走看看