Loading

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("考试....");
	}
	
}
posted @ 2020-04-09 11:49  Krocz  阅读(154)  评论(0编辑  收藏  举报