Java继承详解

Java中的继承

  • 在java中类与类之间只能是单继承,接口与接口之间可以多继承

文章目录

  • Java中的继承
    • 一、继承的产生的原因
    • 二、继承的规则
    • 三、super关键字
    • 四、方法重写
        • 1、产生条件?
        • 2、构成重写的规则
        • 3、父类不能被重写的方法
    • 五、对于继承的一些思考
        • 1、为什么java中只有单继承?单继承有什么好处?
        • 2、哪种访问权限修饰符修饰的方法(属性)可以在子类中直接使用?
        • 3、子类重写的方法在父类调用,调用的是谁的方法?

一、继承的产生的原因

  • 为了实现代码重用

二、继承的规则

  • 只能发生在类与类,接口与接口之间
  • 使用extends关键字
  • 父类的构造器不能被继承
  • 类和类之间只能单继承(一个父亲,多个孩子);接口与接口之间是多继承
  • final修饰的不能被继承

三、super关键字

  • 我们都知道this是代表当前类对象,那么super代表的是父类空间的引用
  • 和this()类似,super()代表的是调用父类构造器,且必须是在本类构造器中,所以应该构造器中不能同时出现this(),super();
  • 和this不同,super不能直接打印,因为super并没有直接创建父类对象,而是将父类的属性和方法直接加载到子类的内存中

四、方法重写

1、产生条件?

  • 发生子父类之间
  • 发生在接口和实现类之间

2、构成重写的规则

  • 相同的方法名参数列表返回类型(返回类型可以不同,但必须是被重写方法返回类型的子类型)
  • 访问权限不能被变小
  • 抛出的异常不能扩大

3、父类不能被重写的方法

  • 被private修饰的方法,或者在不同包被default修饰的方法
  • 静态方法

五、对于继承的一些思考

1、为什么java中只有单继承?单继承有什么好处?

  • 当继承多个类时,可能这多个类中有一样的方法,子类调用该方法,就无法判别具体应该调用哪个方法
  • 当实现多个接口时,因为接口中只能是抽象方法,如果是同一抽象方法,那么他们实现类实现那个方法是两个接口公共的实现方法

2、哪种访问权限修饰符修饰的方法(属性)可以在子类中直接使用?

  • public protected 一定可以在子类调用
  • default 只能在同包子类中调用
  • private 一定不能在子类中调用

3、子类重写的方法在父类调用,调用的是谁的方法?

  • 调用一个方法,先看子类有没有,再看父类方法有没有;如果父类方法有,但是是private修饰的会编译报错,提示没有该方法不可见;如果都没有,那就调用不了该方法
  • 如果调用的方法是子类重写之后的,这不管在哪里调用,调用的都是重写之后的方法

父类构造器调用本类方法

class Father {
	public Father() {
		paly();
	}

	public void paly() {
		System.out.println("Father's play method");
	}
}

class Son extends Father{
	public void paly() {
		System.out.println("Son's play method");
	}
	public static void main(String[] args) {
		new Son();
	}
}

你可能感兴趣的:(Java基础)