Java面向对象之继承、super关键字、方法重写

一、继承

1、简单说明

  • 子类可以拥有父类中除了私有变量/函数外的所有的内容,当出现x是y的一种什么的时候可以使用继承,x继承于y,x是y的儿子,x子类是对y父类的扩展。
  • 反映的是一种特殊关系,如动物->哺乳动物->蓝鲸
  • 关键字 extends: 只支持单继承(一个继承另一个),不支持多继承(c#同样不允许,c++却允许)。
  • 作用:简化代码,提高代码重用率。

2、继承练习
(1)动物类(爷爷类)

public class Test04_Animal{
    
    
	public String name = "蓝鲸";
	public int age = 23;
}

(2)哺乳动物类(父亲类)

public class Test04_Mammal extends Test04_Animal{
    
      //继承动物类
	public int size = 50;  //多加了一个变量
}

(3)蓝鲸类(儿子类)

public class Test04_Whale extends Test04_Mammal{
    
      //继承哺乳类
	//定义一个说话的方法
	public void speek(){
    
    
		System.out.println("我是" + this.age + "大" + this.size + "米长的" + this.name);
	}  //父类中的公有变量也可以使用this进行访问
	public static void main(String[] args){
    
    
		Test04_Whale tw = new Test04_Whale();  //创建对象
		tw.speek();  //调用鲸鱼说话的方法
	}
}

1.2.1

3、继承关系
1.3.1

二、super关键字

1、简单说明
(1)super表示父类中的内容,当父类和子类有同名变量时,使用this是访问子类的,而使用super就是访问父类的public或protected方法。

(2)只能在子类中的构造方法中使用,用于初始化继承自父类的属性,并且需要父类中已经定义了相应签名的构造方法。

(3)可以使用super()调用父类的构造方法,并且只能放在子类构造方法的第一行,且只能调用一次super方法。

2、测试练习
(1)父类

public class Test04_Mammal extends Test04_Animal{
    
      //继承动物类
	public int size = 50;  //多加了一个变量
	protected String addr;  //保护变量,子类继承中可以继承保护变量和公有变量
	//定义父类的构造方法
	public Test04_Mammal(String addr){
    
    
		this.addr = addr;
	}
}

(2)子类

public class Test04_Whale extends Test04_Mammal{
    
      //继承哺乳类
	//定义一个说话的方法
	public void speek(){
    
    
		System.out.println("我是" + this.age + "大" + this.size + "米长的" + this.name);
	}  //父类中的公有变量也可以使用this进行访问
	
	//定义子类的构造方法
	public Test04_Whale(){
    
    
		super("太平洋");  //调用父类的构造方法,传入参数
		System.out.println("我住在" + super.addr);
	}
	
	//定义主方法
	public static void main(String[] args){
    
    
		Test04_Whale tw = new Test04_Whale();  //创建对象,调用子类构造方法
		tw.speek();  //调用鲸鱼说话的方法
	}
}

2.2.1

三、方法的重写

1、简单说明
(1)就是子类对父类中的方法进行重新定义,子类和父类中的方法声明完全一致(毕竟重写肯定是写同一个方法)。

(2)常用于子类对父类的方法不满意,想要更新或者拓展父类的方法。

(3)子类继承的方法的权限,不应比继承自父类的方法更严格(为了保证多态都能实现)。

(4)返回值不能作为重载的条件,因为子类中有了两个同名同参但不同返回值的方法。

2、测试练习
(1)父类

public class Test04_Mammal extends Test04_Animal{
    
      //继承动物类
	public int size = 50;  //多加了一个变量
	protected String addr;  //保护变量,子类继承中可以继承保护变量和公有变量
	//定义父类的构造方法
	public Test04_Mammal(String addr){
    
    
		this.addr = addr;
	}
	//父类中定义一个说话的方法
	public void speek(){
    
    
		System.out.println("我是" + this.age + "大" + this.size + "米长的" + this.name);
	}
}

(2)子类

public class Test04_Whale extends Test04_Mammal{
    
      //继承哺乳类
	//定义子类的构造方法
	public Test04_Whale(){
    
    
		super("太平洋");  //调用父类的构造方法,传入参数
	}
	
	//定义对父类的speek方法的重写:半盖法
	public void speek(){
    
    
		//但重写时又调用了一次父类的speek方法,这样就可以不用担心父类的方法丢失了(半盖法)
		super.speek();  
		//此外,重写时又添加了一条地址语句的输出
		System.out.println("I am in " + super.addr);  
	}
	
	//定义主方法
	public static void main(String[] args){
    
    
		Test04_Whale tw = new Test04_Whale();  //创建对象,调用子类构造方法
		tw.speek();  //调用鲸鱼说话的方法
	}
}

3.2.1

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/119964729