javaSE-chapter13抽象方法与抽象类

1. 抽象方法

  1.1 特征

    1.1.1 使用abstract修饰,方法内没有方法体,留给子类实现

    1.1.2 抽象方法修饰符不能是private, final 以及static修饰,因为抽象方法的设计初衷是希望子类复写(实现),来实现多态

            若使用private修饰符,子类无法复写。final修饰符修饰方法也表明方法该方法为最终方法,无法复写。static是类级

            级别的。

    1.1.3 抽象方法必须在抽象类中

abstract class Animal {
	
	//static abstract void roar1();--编译报错
	
	//private abstract void roar2();--编译报错
	
	//final abstract void roar3();--编译报错
	
}


2. 抽象类

  2.1 特征

    2.1.1 使用abstract修饰符修饰

    2.1.2 不能使用new创建实例对象,但是抽象类有构造器,在实例化子类对象时也会执行抽象类的构造器,可以继承非抽象                   类,是Object的子类

class Living{
	public Living(){
		System.out.println("执行抽象类Animal的父类Living构造器");
	}
}

abstract class Animal extends Living{
	
	public Animal(){
		System.out.println("执行抽象类Animal构造器");
	}
	
}

class Dog extends Animal{
	
	public Dog(){
		System.out.println("执行子类Dog构造器");
	}
}

public class AbstractDemo {
	
	@Test
	public void testAbstractClassConstructor(){
		new Dog();
	}
}

执行结果:

执行抽象类Animal的父类Living构造器
执行抽象类Animal构造器
执行子类Dog构造器

可见,在实例化抽象类Animal的子类Dog时,先调用了抽象类父类Living的默认无参构造器,接着调用了抽象类Animal的构造器,最后执行子类Dog的构造器。

    2.1.3 抽象类中可以没有抽象方法,但抽象方法所在的类必须时抽象类

    2.1.4 抽象类需要有子类(抽象类的设计理念),用以实现抽象类的抽象方法;若子类没有实现/复写父类的所有抽象方法,那么 子类也必须作为抽象类出现

    2.1.5 抽象类的构造器不能都定义成私有的,否则就不能有子类了

    2.1.6 同样的,抽象类也不能用final修饰符,否则就不能有子类了


猜你喜欢

转载自blog.csdn.net/tca0819/article/details/80399724