抽象类

抽象类
抽象方法
1、抽象:抽取像的、相同的、相似的内容出来
2、抽象方法:只有方法声明,而没有方法实现的方法,就是抽象方法
在各个子类中,对于某个方法都有自己不同的实现,所以实现各不相同,无法抽取,只能抽取方法的声明上来,在父类中,方法就只有方法声明没有方法体。就是抽象方法。
3、定义格式:
1、没有方法实现,连大括号都没有,直接在方法声明后面加上一个分号,表示方法定义结束
2、为了将方法标记为抽象方法,需要在方法前面加上一个abstract关键字
代码示例
class Demo07_抽象方法 {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}

class Animal {
//抽象方法
public abstract void eat();
}

class Dog extends Animal {
public void eat() {
System.out.println(“狗吃肉”);
}
}

class Cat extends Animal {
public void eat() {
System.out.println(“猫吃鱼”);
}
}
抽象类
1、可以定义抽象方法的类,就是抽象类
2、定义格式:
abstract class 类名 {

}
代码示例
class Demo08_抽象类 {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}

abstract class Animal {
//抽象方法
public abstract void eat();
}

class Dog extends Animal {
public void eat() {
System.out.println(“狗吃肉”);
}
}

class Cat extends Animal {
public void eat() {
System.out.println(“猫吃鱼”);
}
}
抽象类的特点
1、抽象类和抽象方法都需要使用abstract关键字修饰
抽象类:abstract class {}
抽象方法:public abstract void test();
2、抽象类和抽象方法的关系:
抽象方法所在的类必须是抽象类
抽象类中未必一定都定义抽象方法,抽象类中未必存在抽象方法
3、抽象类的实例化(抽象类如何创建对象)
抽象类不能直接实例化
定义抽象类的子类,由子类创建对象,调用方法
4、抽象类子类的前途
在子类中,将父类所有的抽象方法全部重写(实现),子类就成了一个普通类,就可以创建对象
在子类中,没有将父类中所有的抽象方法全部实现,子类就还是一个抽象类,还需要使用abstract关键字修饰子类。
代码示例
class Demo10_抽象类成员特点 {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}

abstract class Fu {
int i = 10;
final int j = 20;
/*
//可以是变量,可以是常量,但是不能被抽象
abstract int i = 10;
abstract final int j = 20;
*/
}
抽象类成员特点
1、成员变量:可以定义变量,也可以定义常量,但是不能被抽象
2、构造方法:有
虽然本类无法创建对象,但是抽象类一定有子类,子类会访问父类的抽象方法。
是否有构造方法,不取决于是否可以创建对象,而是取决于是否可以定义成员变量。如果可以定义成员变量,那么就需要初始化成员变量,就是构造方法来完成的。
3、成员方法:
既可以是抽象方法:强制子类重写
也可以是非抽象方法:用于给子类继承,提高代码的复用性
代码示例
class Demo10_抽象类成员特点 {
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}

abstract class Fu {
int i = 10;
final int j = 20;
/*
//可以是变量,可以是常量,但是不能被抽象
abstract int i = 10;
abstract final int j = 20;
/
}
员工类练习
程序员类:属性(姓名、工号、工资、奖金),行为(工作:软件开发)
测试工程师:属性(姓名、工号、工资),行为(工作:软件测试)
项目经理类:属性(姓名、工号、工资、奖金),行为(工作:控制进度)
代码示例
class Demo11_员工类案例 {
public static void main(String[] args) {
Employee e1 = new Coder(“亚瑟”, “ys002”, 10000.0, 3000);
e1.show();
e1.work();
Employee e2 = new Manager(“秦始皇”, “qsh001”, 20000.0, 30000);
e2.show();
e2.work();
}
}
/

程序员类:属性(姓名、工号、工资、奖金),行为(工作:软件开发)
测试工程师:属性(姓名、工号、工资),行为(工作:软件测试)
项目经理类:属性(姓名、工号、工资、奖金),行为(工作:控制进度)
*/

abstract class Employee {
private String name;
private String id;
private double salary;

public Employee() {}

public Employee(String name, String id, double salary) {
	this.name = name;
	this.id = id;
	this.salary = salary;
}

public void setName(String name) {
	this.name = name;
}

public String getName() {
	return name;
}

public void setId(String id) {
	this.id = id;
}

public String getId() {
	return id;
}

public void setSalary(double salary) {
	this.salary = salary;
}

public double getSalary() {
	return salary;
}

public abstract void show();

public abstract void work();

}

abstract class DevEmp extends Employee {
private int bonus;

public DevEmp() {}

public DevEmp(String name, String id, double salary, int bonus) {
	super(name, id, salary);
	this.bonus = bonus;
}

public void setBonus(int bonus) {
	this.bonus = bonus;
}

public int getBonus() {
	return bonus;
}

@Override
public void show() {
	System.out.println(getName() + "..." + getId() + "..." + getSalary() + "..." + bonus);
}

}

class Coder extends DevEmp {
public Coder() {}

public Coder(String name, String id, double salary, int bonus) {
	super(name, id, salary, bonus);
}

@Override
public void work() {
	System.out.println("软件开发");
}

}

class Manager extends DevEmp {
public Manager() {}

public Manager(String name, String id, double salary, int bonus) {
	super(name, id, salary, bonus);
}

@Override
public void work() {
	System.out.println("控制项目进度");
}

}

class Tester extends Employee {
public Tester() {}

public Tester(String name, String id, double salary) {
	super(name, id, salary);
}

@Override
public void work() {
	System.out.println("软件测试");
}

@Override
public void show() {
	System.out.println(getName() + "..." + getId() + "..." + getSalary());
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值