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("考试....");
    	}
    	
    }
    
  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/zy200128/p/12634397.html
Copyright © 2011-2022 走看看