彦舜筹备出书中:继承关系中抽象类中,普通方法中调用被子类覆写的抽象方法

本文探讨了在Java中如何使用抽象类及其实现子类的方法调用过程,详细介绍了在抽象类的普通方法中调用抽象方法的机制,并通过具体代码示例展示了这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package cm.abstracts.application;

//这个类用来测试:在抽象类的普通方法中调用抽象方法
public class InstanceFfourtyFive {
	public static void main(String[] args) {
		//有构造方法不一定有对应的抽象方法,有抽象方法必有对应的构造方法
		//通过子类实例化抽象类对象
		Love l = new Hate();
		//直接调用抽象类中定义的抽象方法,其具体内容已经过子类覆写
		l.diaoChou();
	}
}

//创建抽象模板类:父类,必有子类,关键字abstract
abstract class Love{
	//对类中程序自动创建的隐式构造方法,要习惯性创建,养成一种良好习惯
	public Love() {}
	
	//创建抽象类中的普通方法,并在此抽象类的此普通方法中调用抽象方法
	/**	抽象类中可以定义普通方法,最为关键的是,这些普通方法可以直接调用抽象类中定义的抽象方法,而具体的抽象方法是经过子类覆写的	*/
	protected void diaoChou() {
		//经过子类覆写的抽象方法的具体内容
		this.love();
	}
	
	//抽象类中定义的抽象方法
	public abstract void love();
}

//创建子类:抽象类必有子类,一个子类只能有一个抽象类(父类)
class Hate extends Love{
	//对类中程序自动创建的隐式构造方法,要习惯性创建,养成一种良好习惯
	public Hate() {}
	
	@Override  //备注:中文意思覆写、重写、覆盖,重写抽象类中的同名抽象方法
	/**	抽象类中可以定义普通方法,最为关键的是,这些普通方法可以直接调用抽象类中定义的抽象方法,而具体的抽象方法是经过子类覆写的	*/
	//经过子类覆写的抽象方法的具体内容
	public void love() {
		System.out.println("问世间情为何物,直教人生死相许");
		System.out.println("我爱谁,谁爱我,我还能爱谁");
		System.out.println("誓要出书,哪怕自费,字数最起码几十万,近百万");
	}
	
}

彦舜原创,首发

在父的构造方法调用可能被子方法可能会引发一些意想不到的问题,因为在子的构造方法中,它的成员变量可能还未被初始化完成,此时调用方法可能会导致意想不到的结果,例如空指针异常等。 具体来说,当父的构造方法调用一个被子方法时,如果子中的该方法引用了子中的成员变量,而这些成员变量在父的构造方法中还未被初始化,那么就可能会导致子中的该方法出现异常。 例如,以下代码演示了在父的构造方法调用被子方法可能导致的问题: ```java public class Animal { public Animal() { move(); // 调用被子方法 } public void move() { System.out.println("Animal is moving"); } } public class Dog extends Animal { private String name; public Dog(String name) { super(); this.name = name; } @Override public void move() { System.out.println(name + " is running"); } } public class Test { public static void main(String[] args) { Dog dog = new Dog("Tom"); } } ``` 在上面的代码中,父Animal的构造方法调用被子Dog方法move(),而子Dog中的move()方法引用了成员变量name,而这个成员变量在父Animal的构造方法中还未被初始化。因此,在运行上面的代码时,会出现空指针异常。 为了避免这种问题,我们应该尽量避免在父的构造方法调用被子方法。如果必须要调用,可以将该方法设置为final型,或者将该方法放在父的构造方法之后进行调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值