`
i学霸
  • 浏览: 12611 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

I学霸官方免费教程十六:Java面向对象之抽象类

 
阅读更多

抽象类

使用关键字abstract声明的类,就是抽象类。
语法格式:[public] abstract class 类名{}

抽象类不能被实例化(创建对象),但是可以声明引用;
抽象类不能使用final修饰,一旦使用final修饰,表示这个抽象类将不能被继承,而抽象类又不能被实例化,这样创建出来的这个抽象类就没有任何意义了。所以,java规定抽象类不能使用关键字final修饰,否则会出现编译错误
抽象类中可以声明抽象方法和普通方法,普通类中不能包含抽象方法;

抽象方法

加了abstract声明的方法,而且不能有方法体,使用英文格式的分号结束。
语法格式:[访问修饰符] abstract 返回值类型 方法名([参数列表]);
抽象方法不能被private、final、static修饰
抽象类中的抽象方法不能省略关键字abstract
在子类中必须实现父类中的抽象方法,除非子类也是一个抽象类。
实例:
package abstracts;
/**
 * 创建抽象类Person 
 * @author 学霸联盟 - 赵灿
 */
public abstract class Person {
	// 抽象类中可以有变量,声明一个变量age
	public int age;

	// 抽象类中可以有构造方法
	public Person() {
	}

	// 抽象类中可以有普通方法,声明一个普通方法eat
	void eat() {
		System.out.println("吃");
	}

	/*
	 * 抽象类中可以有抽象方法,普通类中不能含有抽象方法
	 * 作为人类需要工作,但不同的人有不同的工作,现在还不知道具体是什么工作
	 * 所以此处声明一个抽象的方法,只是规定了子类中必须要实现工作的方法
	 * 具体如何工作由子类自己去实现
	 * 抽象方法不能使用static或final修饰
	 */
	public abstract void work();
}

package abstracts;
/**
 * 如果子类也是抽象类,则可以不用重写父类中的抽象方法
 * @author 学霸联盟 - 赵灿
 */
public abstract class YellowRace extends Person {
	//这里可以不实现父类中的抽象方法
}

package abstracts;
/**
 * 创建开发者类Developer,继承Person类 
 * @author 学霸联盟 - 赵灿
 */
public class Developer extends Person {
	// 必须实现父类中的抽象方法
	@Override
	public void work() {
		// 本类中并没有声明变量age,所以此处的age是从父类中继承的
		this.age = 18;
		System.out.println("编写代码");
	}
}

package abstracts;
/**
 * 创建测试类Test 
 * @author 学霸联盟 - 赵灿
 */
public class Test {
	public static void main(String[] args) {
		// 父类引用指向子类对象
		Person p = new Developer();
		// 调用父类中的eat方法
		p.eat();
		// 这里将会执行子类中重写的work方法
		p.work();
	}
}
运行结果:
吃
编写代码

小结:
抽象类的优点:可以包含抽象方法,从而规定子类中必须有哪些方法
抽象类的缺点:java只支持单根继承


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics