Java抽象类构造器的作用

Java抽象类构造器的作用

抽象类中的构造器方法会在子类实例化的时候调用
如下:

abstract class Person {
	Person(){
		System.out.println("Person 无参");
	}
	
	Person(String a){
		System.out.println("Person 有参"+a);
	}
}
//boy继承person
public class Boy  extends Person{
	Boy(){
		System.out.println("Boy 无参");
	}
	Boy(String a){
		System.out.println("Boy 有参"+a);
	}
	Boy(int a){
		super(a+"");
		System.out.println("Boy  int有参"+a);
	}
	public static void main(String[] args) {
		Boy h=new Boy();
		System.out.println("-----------");
		new Boy("aa");
	}
}

结果如下:

Person 无参
Boy 无参
-----------
Person 无参
Boy 有参aa

可以看到子类继承抽象类后,子类实例化时会自动执行父类的无参构造方法。


延申使用:
1:可以利用抽象类构造器的此特点获取所有的子类,并调用子类中的方法
Person.java

public abstract class Person {
	public static final List<Person> ALLLIST=new ArrayList<>();
	//父类初始化添加子类实例
	Person(){
		Person.ALLLIST.add(this);
		System.out.println("Person 无参");
	}
	Person(String a){
		System.out.println("Person 有参"+a);
	}
	abstract void init();
}

Girl.java

public class Girl extends Person{
	@Override
	void init() {
		System.out.println("girl  初始化...");
	}
}

Boy.java

//boy继承person
public class Boy  extends Person{
	public static void main(String[] args) {
		//在普通方法中需要实例化。ALLLIST才会把子类添加到list集合中
		//在springboot项目中,只要将Boy与Girl方法添加@Component注解即可将子类添加到集合中,无需new实例化对象
		Boy b=new Boy();
		Girl g=new Girl();
		//list中可以获取所有继承Person的子类
		List<Person> list=Person.ALLLIST;
		System.out.println("所有的子类:"+list);
		//调用子类中的方法
		list.forEach(e -> e.init());
	}
	@Override
	void init() {
		System.out.println("boy  初始化...");
	}
}

运行结果:

Person 无参
Person 无参
所有的子类:[abstrac.Boy@9e89d68, abstrac.Girl@3b192d32]
boy  初始化...
girl  初始化...

抽象类可以实现接口,然后不用重写接口中的任何方法
在定义接口后,若有接口的实现类,那么必须去重写接口中的所有方法。能不能不重写接口的方法呢,当然是可以的,如果是抽象类实现了接口,即可不用重写接口的任何方法。

public interface TestService {
    void printTest();
    String printTest1();
}
public class TestServiceImpl implements TestService {
    @Override
    public void printTest() {
        System.out.println("进入printTest");
    }

    @Override
    public String printTest1() {
        System.out.println("进入printTest1");
        return "进入printTest1";
    }
}
public abstract class AbstractTest implements TestService{
  //可以不去实现TestService中的任何接口
}
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值