JAVA笔记-抽象类

抽象类
一、抽象类声明格式:abstract class xx
二、抽象类特点:1.被abstract修饰

2.抽象类中不一定有抽象方法,但有抽象方法一定是抽象类
				abstract class A{
					public void B(){}
					public abstract void B(){} //编译报错,抽象方法不能有方法体
					public abstract void B();  //正确写法
				}//可以编译
				class A{
					public abstract void B();
				}//编译报错,有抽象方法必是抽象类	
3.抽象类的实例化

a:抽象类不能直接实例化           

                                           abstract class A{}
					class abstractDemo{
						public static void main(String[] args){
							A a=new A();//出错
						}
					}

b:抽象类可以通过多态的方式实例化                                                                                          

					abstract class A{}
					class B extends A{}
					class abstractDemo{
						public static void main(String[] args){
							A a=new B();//多态向上转型
						}
					}

4.抽象类子类
a:抽象类子类也应是一个抽象类(不重写抽象方法)
abstract class A{}
abstract class B extends A{}
b:子类不是抽象类,是具体的类(应该重写抽象方法)
						abstract class A{
							public abstract void a{}
						}
						class B extends A{
							public void a{
								syso("重写抽象方法");
							}
						}



三、抽象类的成员特点:
1.成员变量:
既可以是变量也可以是常量
abstract class A{
				public int num=10;
				public final int num2=20;
			}
			class B extends A{}
			class abstractDemo{
				public static void main(String[] args){
					syso(num+" "+num2);//输出10 20
				}
			}



2.构造方法:有
用来子类访问父类数据初始化

3.成员方法:
抽象方法:强制要求子类做的事情
普通成员方法:子类继承的事情,提高代码复用性
abstract class Person{
				public abstract void breath();//每人都要呼吸,即强制子类做事。
				public void eat(){
					syso("吃饭");
				}//提高代码复用性
			}
			class Student extends Person{
				public void breath(){
					syso("需要呼吸")
				}
			}
			class Teacher extends Person{
				public void breath(){
					syso("需要呼吸")
				}
			}

     四、抽象类练习员工案例

/*
	假如我们在开发一个系统时需要对员工类进行设计,员工包含3个属性:姓名、工号以及工资。
	经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。
	请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。
	
	分析:
		普通员工类
			成员变量:姓名、工号以及工资。
			成员方法:工作
		经理类:
			成员变量:姓名、工号以及工资,奖金属性
			成员方法:工作
			
	实现:
		员工类:
		职员类:
		经理类:
*/

//员工类
abstract class Employee{
	//成员属性姓名,员工号,工资
	private String name;
	private int employeeid;
	private double salary;
	
	public Employee() {}
	public Employee(String name,int employeeid,double salary) {
		this.name=name;
		this.employeeid=employeeid;
		this.salary=salary;
	}
	//抽象方法工作
	public abstract void work();
	public void show() {
		System.out.println("姓名:"+name+" 职员号 :"+employeeid+" 薪水:"+salary);
	}
}

//职工类
class Worker extends Employee{
	public Worker() {}
	public Worker(String name,int employeeid,double salary) {
		super(name,employeeid,salary);
	}
	public void work() {
		System.out.println("职员做基层工作");
	}
}

//经理类
class Manager extends Employee{
	//特有属性奖金
	private double bonus;
	
	public Manager() {}
	public Manager(String name,int employeeid,double salary,double bonus) {
		super(name,employeeid,salary);
		this.bonus=bonus;
	}
	public void work() {
		System.out.println("经理做管理工作");
	}
	//特有方法
	public void getBonus() {
		System.out.println("奖金:"+bonus);
	}
}

class Test{
	public static void main(String[] args){
		//普通员工,用多态
		Employee worker=new Worker("Mike",3,4000);
		worker.show();
		worker.work();
		System.out.println("---------------------");
		//测试经理,自己调用,因为有特有方法
		Manager manager=new Manager("Jike",1,8000,2000);
		manager.show();
		manager.getBonus();
		manager.work();
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值