Java基础:抽象类和抽象方法


一.Java抽象类

概念:在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没包含足够的信息来描述一个具体的对象,这样的类就是抽象类。

理解:对象跟类相互依赖,Java通过类来创建对象,类用来描述对象。

抽象类除了不能实例化对象之外,类的其他功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样

理解:抽象类不能实例化对象,但是可以作为父类被继承。

抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

理解:单继承多实现

二.抽象方法

该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。

Abstract关键字用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。

举例:public abstract void eat();

声明抽象方法需注意:

*如果一个类包含抽象方法,那么该类必须是抽象类。

*任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

三.抽象类总结规定:

1.抽象类不能被实例化。

2.抽象类中不一定包含抽象方法,但是有抽象方法的一定是抽象类。

3.抽象类中的抽象方法没有方法体。

4.构造方法、静态方法(Static修饰的方法)不能声明为抽象方法。

5.抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

四.代码

1.抽象类代码:

/**
 * 抽象类(继承关系)
 * 抽象方法(被实现)
 * */
public abstract class Student {
/*
 * 成员变量 用private修饰保证成员变量私有
 */
private int    number;
private String name;
private String address;
/*
 * 有参构造方法,创建对象时,首先调用构造方法
 */
public Student(int number,String name, String address){
	this.name=name;
	this.number=number;
	this.address=address;
}
/*
 * 抽象方法,没有方法体
 */
public abstract void jump();
/*
 * 具体方法
 */
public void eat(){
	System.out.println("eat!");
}
public void sleep(){
	System.out.println("sleep!");
}
/*
 * 通过get/set方法,获取私有成员变量的值。
 */
public int getNumber() {
	return number;
}
public void setNumber(int number) {
	this.number = number;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getAddress() {
	return address;
}
public void setAddress(String address) {
	this.address = address;
}
@Override
public String toString() {
	return "Student [number=" + number + ", name=" + name + ", address="
			+ address + "]";
}
}

2.抽象类的子类——具体实现类:

/**
 * 抽象类的子类——具体实现类
 * */
public class ManStudent extends Student{
	/*
	 * 子类的构造方法,首先super();
	 * 无参调用super();
	 * 有参就调用super(A,B,C);
	 * 调用父类的构造方法,才能通过父类的引用指向子类对象。
	 */
public ManStudent(int number, String name, String address) {
	super(number, name, address);
	}
/*
 * 可以重写父类的普通方法,也可以直接调用。看具体实现。
 */
public void eat(){
	System.out.println("eat two!");
}
public void sleep(){
	System.out.println("sleep two!");
}
/*
 *必须重写抽象类的抽象方法
 */
@Override
public void jump() {
	System.out.println("jump!");
	
}
public static void main(String[] args) {
	Student stu =new ManStudent(1,"1","1");
	stu.eat();
	stu.sleep();
	stu.jump();
}
}

六.面试题

下列哪一种叙述是正确的()

A abstract修饰符可修饰字符、方法和类

B抽象方法的body部分必须用一对大括号{}包住

C声明抽象方法,大括号可有可无

D声明方法不可写出大括号

正确答案:D

A选项abstract修饰符不能修饰字符

B,C选项声明方法body部分不可写大括号

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值