浅析abstract关键字

一 抽象类和抽象方法常用知识点

1)抽象类作为被继承类,子类必须实现抽象类中的所有抽象方法,除非子类也为抽象类

也就是说,如果抽象类的子类还是抽象类,那么这个子类即可以重写父类的抽象方法,

也可以继承父类的抽象方法,即如果子类也为抽象类,可以不实现父类中的抽象方法。

但是,如果有一个非抽象类继承于抽象子类,需要实现抽象子类,抽象子类的抽象父类的所有抽象方法。

2)抽象类不能用final进行修饰,并且必须是public和友元权限,故不能使用private和protected。

3)抽象类不能被实例化,也就是说你用的时候不能通过new关键字创建。

4)抽象类中可以包含抽象方法和非抽象方法,抽象方法没有方法体,也就是没有具体实现,

只是定义了有什么功能,但是非抽象方法含有方法体。

二 实例代码

1、抽象父类Person

package com.lanhuigu.java;
/**
 * 抽象类:不能用final修饰,
 * 可以包含抽象方法和非抽象方法,
 * 抽象方法没有方法体,只是定义功能,没有实现;
 * 非抽象方法为正常的方法。
 */
public abstract class Person {
	
	/**
	 * abstract methods
	 */
	public abstract String eat();
	
	public abstract String sleep();
	
	/**
	 * non-abstract methods
	 */
	public String sport() {
		return "生命在于运动";
	}
}

2、非抽象子类Teacher

package com.lanhuigu.java;
/**
 * 继承于抽象类person,必须实现父类中的所有抽象方法
 */
public class Teacher extends Person {

	@Override
	public String eat() {
		return "老师吃饭";
	}

	@Override
	public String sleep() {
		return "老师睡觉";
	}

}

3、非抽象子类Student

package com.lanhuigu.java;
/**
 * 继承于抽象类person,必须实现父类中的所有抽象方法
 */
public class Student extends Person {

	@Override
	public String eat() {
		return "学生吃饭";
	}

	@Override
	public String sleep() {
		return "学生睡觉";
	}

}

4、抽象子类OthersPerson

package com.lanhuigu.java;
/**
 * 抽象类继承自抽象类,可以不用实现其父类的抽象方法
 */
public abstract class OthersPerson extends Person {
	public abstract String call();
}

5、非抽象子类ExtendsOthersPerson继承于抽象子类OthersPerson

package com.lanhuigu.java;
/**
 * 必须实现抽象父类OthersPerson,以及OthersPerson父类Person中
 * 的所有抽象方法,新帐旧账一起算。
 */
public class ExtendsOthersPerson extends OthersPerson {

	@Override
	public String sleep() {
		return "睡觉";
	}

	@Override
	public String eat() {
		return "吃饭";
	}

	@Override
	public String call() {
		return "打电话";
	}

}

6、测试代码

package com.lanhuigu.java;

public class TestAbstract {
	public static void main(String[] args) {
		Teacher teacher = new Teacher();
		Student student = new Student();
		
		//OthersPerson othersPerson = new OthersPerson();//报错,抽象类不能被实例化
		
		System.out.println(teacher.eat());
		System.out.println(teacher.sleep());
		System.out.println(teacher.sport());// 继承父类非抽象方法
		System.out.println("==============");
		System.out.println(student.eat());
		System.out.println(student.sleep());
		System.out.println(student.sport());// 继承父类非抽象方法
	}
}

7、控制台输出

老师吃饭
老师睡觉
生命在于运动
==============
学生吃饭
学生睡觉
生命在于运动

 

你可能感兴趣的:(#,---Java基础)