方法重写与super关键字

在继承关系中,子类会自动继承父类中定义的方法,但有时需要对继承的方法进行修改,即对父类的方法进行重写。
需要注意的是,在子类中重写的方法需要和父类被重写方法的具有相同的方法名、参数列表以及返回值类型。
父类

public class SuperTest {
	String name = "动物";
	public void shout() {
		System.out.println("动物发出叫声");
	}
}

子类

public class Dog extends SuperTest {
	String name = "犬类";
	public void shout() {
		System.out.println("旺旺");
	}
}

测试类

public class Example03 {
	public static void main(String[] args) {
		Dog dog =new Dog();
		dog.shout();
	}
}

需要注意的使,重写方法不会调用父类的方法,只会调用子类重写方法。

super关键字

使用super关键字访问父类的成员变量和成员方法。
父类

 public class Animal{
	String name = "动物";
	public void shout(){
		System.out.println("动物发出叫声");
	}
}

子类

public class Dog{
	String name  = "我是狗";
	void shout(){ //重写父类的shout方法
		System.out.println("旺旺");
		super.shout();//访问父类的成员方法
	} 
	public void PrintName(){
		System.out.println("Name="+super.name);
	}
}

测试类

public class Test(){
	public staitc void main(String [] args){
		Dog dog = new Dog();
		dog.shout();
		dog.PrintName();
	}
}// Output:
	动物发出叫声
	旺旺	
	

2.使用super访问父类的构造方法

父类

public class Animal{
	String name = "动物";
	public Animal(String name){
		System.out.println("我是一只"+name)
	}	
}

子类

public class Dog	{
	public Dog() {
		super("沙皮狗");
		// TODO Auto-generated constructor stub
	}
}

测试类

public void Test{
	public static void main(String [] args){
		Dog dog =  new Dog();
	}
}
  1. 测试类在实例化Dog对象时,一定会调用Dog类的构造方法。
  2. 通过super调用父类的构造方法的代码,必须位于子类构造方法的第一行,并且只能出现一次。

如果将子类的super(“沙皮狗”)注释掉,那么编译器会报错。
在子类的构造方法中一定会调用某个父类的构造方法。这是可以在子类的构造方法中通过super指定调用哪个构造方法,如果没有指定,在实例化子类对象时会自动调用父类的无参构造方法。
子类在实例化时默认调用了无参的构造方法,在定义一个类时,如果没有特殊需求,尽量定义一个无参的构造方法,避免被继承时出错。

猜你喜欢

转载自blog.csdn.net/pz_cpkc/article/details/105291452