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);
		
	}
}
![](https://img2020.cnblogs.com/blog/1720775/202004/1720775-20200404213624605-118128102.png)
####分析:
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("考试....");
}

}

猜你喜欢

转载自www.cnblogs.com/zy200128/p/12634397.html