JAVA抽象类

什么是抽象方法:

当在定义父类时,它里面的方法都是代表该类型应该具有这些行为动作,而具体的实现需要在子类中去重写时,那么父类的方法声明和方法主体,就只有声明还有意义,而方法主体则没有存在的意义了。这种只有方法声明,没有方法主体的方法称为抽象方法。

什么是抽象类:

从语法上来说,包含抽象方法的类就是抽象类。

抽象类的定义方式:

抽象类:访问控制修饰符 abstract class 类名;
抽象方法:修饰符 abstract 返回值类型 方法名(参数列表);

  1. 在 java 中采用 abstract 关键字定义的类就是抽象类,采用 abstract 关键字定义的方法就 是抽象方法
  2. 抽象的方法只需在抽象类中,提供声明,不需要实现
  3. 如果一个类中含有抽象方法,那么这个类必须定义成抽象类
  4. 如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被重写。如果在子类中不复写该抽象方法,那么必须将此类再次声明为抽象类
  5. 抽象类不能被 final 修饰
  6. 抽象方法不能被 final 修饰,因为抽象方法就是被子类实现的抽象类中可以包含方法实现,可以将一些公共的代码放到抽象类中,另外在抽象类中可以定义一些抽象的方法,这样就会存在一个约束,而子类必须实现我们定义的方法,如:teacher 必须实现 printInfo 方法,Student 也必须实现 printInfo 方法,方法名称不能修改,必须为 printInfo,这样就能实现多态的机制,有了多态的机制,我们在运行期就可以动态的调用子类的方法。所以在运行期可以灵活的互换实现。
    在这里插入图片描述
采用 abstract 声明抽象类
public class AbstractTest01 {
	public static void main(String[] args) {
	//不能实例化抽象类
	//抽象类是不存在,抽象类必须有子类继承
	Person p = new Person();
	//以下使用是正确的,因为我们 new的是具体类
	Person p1 = new Employee();
	p1.setName("张三");
	System.out.println(p1.getName());
	} 
}

//采用 abstract 定义抽象类
//在抽象类中可以定义一些子类公共的方法或属性
//这样子类就可以直接继承下来使用了,而不需要每个
//子类重复定义
abstract class Person {
private String name;
public void setName(String name) {
this.name = name; }
	public String getName() {
	return name;
	}
//此方法各个子类都可以使用
	public void commonMethod1() {
	System.out.println("---------commonMethod1-------");
	} 
}
class Employee extends Person {
}
class Student extends Person {
}

在这里插入图片描述

抽象的方法只需在抽象类中,提供声明,不需要实现,起到了一个强制的约束作用,要求子类必须实现
public class AbstractTest02 {
	public static void main(String[] args) {
	//Person p = new Employee();
	//Person p = new Student();
	//Person p = new Person();
	p.setName("张三");
	p.printInfo();
	} 
}
abstract class Person {
	private String name;
	public void setName(String name) {
	this.name = name;
	}
	public String getName() {
	return name;
	}
//此方法各个子类都可以使用
	public void commonMethod1() {
	System.out.println("---------commonMethod1-------");
	}
//public void printInfo() {
// System.out.println("------Person.printInfo()--------");
//}
//采用 abstract 定义抽象方法
//如果有一个方法为抽象的,那么此类必须为抽象的
//如果一个类是抽象的,并不要求具有抽象的方法
public abstract void printInfo();
}
class Employee extends Person {
//必须实现抽象的方法
	public void printInfo() {
	System.out.println("Employee.printInfo()");
	} 
}

class Student extends Person {//必须实现抽象的方法
	public void printInfo() {
	System.out.println("Student.printInfo()");
	} 
}
如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被覆盖。如果在子类中不覆盖该抽象方法,那么必须将此方法再次声明为抽象方法
public class AbstractTest03 {
	public static void main(String[] args) {
	//此时不能再 new Employee 了
	Person p = new Employee();
	} 
}
abstract class Person {
	private String name;
	public void setName(String name) {
	this.name = name;
	}
	public String getName() {
	return name;
	}
	//此方法各个子类都可以使用
	public void commonMethod1() {
	System.out.println("---------commonMethod1-------");
	}
	//采用 abstract 定义抽象方法
	public abstract void printInfo();
	}
	abstract class Employee extends Person {
	//再次声明该方法为抽象的
	public abstract void printInfo();
	}
class Student extends Person {
	//实现抽象的方法
	public void printInfo() {
	System.out.println("Student.printInfo()");
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值