java 抽象类

本文详细阐述了抽象类的特点,包括抽象方法和抽象类的定义,以及它们在设计多态和代码复用中的作用。通过实例演示了抽象类的构造方法、成员变量和方法,以及如何通过多态来创建和调用。还讨论了抽象类中可能遇到的问题和关键字限制。
摘要由CSDN通过智能技术生成

抽象类的特点:
抽象类和抽象方法必须用abstract关键字修饰
一个类中如果有抽象的功能,该类必须是抽象类
有抽象方法的类必须定义为抽象类
抽象类中不一定有抽象方法
抽象类不能实例化
因为他不是具体的, 需要通过多态的方式来实例化 Animal a = new Dog();
抽象类有构造方法,用于子类访问父类数据的初始化
抽象类的子类
如果不想重写抽象方法, 该子类是一个抽象类
重写所有的抽象方法,这个时候子类是一个具体的类
public abstract void eat(){} // 空方法体
public abstract void eat() // 无方法体

抽象类的成员特点:
成员变量:可以是变量可以是常量
构造方法:有,用于子类访问父类数据初始化
成员方法:既可以是抽象的也可以是非抽象的
抽象类的成员方法特性:
抽象方法:强制要求子类做的事情
非抽象方法 子类继承的事情,提高代码复用性

例:
abstract class Animal{
public abstract void eat();
}
class Dog extends Animal{
public void eat(){
System.out.println(“狗吃狗粮”);
}
}
class AbstractDemo{
public static void main(String[] args){
Animal a = new Dog();
a.eat();
}
}

抽象类多态方式使用
abstract class Employee{
private String name;
private int id;
private int salary;
public Employee(){}
public Employee(String name, int id, int salary){
this.name = name;
this.id = id;
this.salary = salary;
}
public void setName(String name){
this.name = name;
}
public void setId(int id){
this.id = id;
}
public void setSalary(int salary){
this.salary = salary;
}
public String getName(){
return name;
}
public int getId(){
return id;
}
public int getSalary(){
return salary;
}
public abstract void work();
}
class Manager extends Employee{
private int money; // bonus 奖金
public Manager(){}
public Manager(String name,int id, int salary, int money){
super(name,id,salary);
this.money = money;
}
public void work(){
System.out.println(“跟客户谈需求”);
}
public void setMoney(int money){
this.money = money;
}
public int getMoney(){
return this.money;
}

}
class Programmer extends Employee{
public Programmer(){}
public Programmer(String name,int id, int salary){
super(name,id,salary);

}
public void work(){
	System.out.println("按照需求写代码");
}

}

class AbstractTest{
public static void main(String[] args){
Employee emp = new Programmer();
emp.setName(“张柏芝”);
emp.setId(1);
emp.setSalary(1000);
System.out.println(emp.getName()+" “+emp.getId()+” “+emp.getSalary());
emp.work();
System.out.println(”---------------");
Employee emp1 = new Programmer(“张曼玉”,2,1111);
System.out.println(emp1.getName()+" “+emp1.getId()+” “+emp1.getSalary());
emp1.work();
System.out.println(”---------------");
Employee m = new Manager(); // 如果需要子类特有的 Manager m = new Manager();
m.setName(“张学友”);
m.setId(3);
m.setSalary(3000);
/*
m.setMoney(5000);
System.out.println(m.getName()+" “+m.getId()+” “+m.getSalary()+” “+m.getMoney());
*/
m.work();
System.out.println(m.getName()+” “+m.getId()+” "+m.getSalary());

	Manager m1 = (Manager)m;
	m1.setMoney(5000);
	System.out.println(m1.getName()+" "+m1.getId()+" "+m1.getSalary()+" "+m1.getMoney());
}

}

抽象类中的小问题
abstract不能和那些关键字共存
private 冲突
final 冲突
static 无意义(报错冲突)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值