java--abstract类

abstract:抽象的,可以用来修饰类、方法
 
1.abstract修饰类:抽象类
1)不可被实例化
2)抽象类有构造器 (凡是类都有构造器)
3)抽象方法所在的类,一定是抽象类。
4)抽象类中可以没有抽象方法。

2.abstract修饰方法:抽象方法
1)格式:没有方法体,包括{}. 如:public abstract void eat();
2)抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
3)若子类继承抽象类,并重写了所有的抽象方法,则此类是一个"实体类",即可以实例化
4)若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的!

package test11;


public class TestAbstract {
	public static void main(String[] args) {
		//Person p1 = new Person();
		//p1.eat();
		
		Student s = new Student();
		s.eat();
		
		Person p = new Student();//多态
		p.eat();
		
	}
}

abstract class Creator{
	abstract void breath();
}

abstract class Person extends Creator{
	String name;
	public abstract void eat();
	public abstract void walk();
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Person(){
		
	}
	public Person(String name){
		this.name = name;
	}
}
class Student extends Person{
	public void eat(){
		System.out.println("学生吃饭");
	}
	public void walk(){
		System.out.println("学生走路");
	}
	@Override
	void breath() {
		System.out.println("学生不应该呼吸雾霾的空气");
	}
}

abstract class Worker extends Person{
	public void eat(){
		System.out.println("工人吃饭");
	}
//	public void walk(){
//		System.out.println("工人走路");
//	}
}

class Animal{
	//不是抽象方法!
	public void sleep(){
		
	}
}

abstract 不能用来修饰属性、构造器、private、final、static

package test11;

public class TestAbstract1 {
	
}

abstract class A1{
	//abstract int name;
	//因为构造器不能被重写
//	public abstract A1(){
//		
//	}
	//子类不能覆盖(或重写)声明为private的方法的。
	//private abstract void method1();
	
	//
//	public abstract final void method2();
//		
//	
//	public abstract static void method3();
//		
//	
}

练习:编写一个Employee类,声明为抽象类,包含如下三个属性:name、id、salary。提供必要的构造器和抽象方法:work()。对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。请使用继承的思想,设计CommonEmployee类和Manager类,要求类中提供必要的方法进行属性访问。

package test11;
public class TestEmployee{
  public static void main(String[] args) {
	Employee e = new Manager();
	e.work();
	Employee e1 = new CommonEmployee();
	e1.work();
  }
}
abstract  class Employee {
    public int id;
    public String name;
    public String salay;
	
	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public String getSalay() {
		return salay;
	}

	public void setSalay(String salay) {
		this.salay = salay;
	}

	public abstract void work();
}
class Manager extends Employee{
	private double bonus;
	
	public double getBonus() {
		return bonus;
	}

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

	public void work() {
		System.out.println("work");
	}
}
class CommonEmployee extends Employee{
	public void work() {
		System.out.println("study");
	}
}

模板方法设计模式

package test11;

//模板方法设计模式
public class TestTemplate {
	public static void main(String[] args) {
		new SubTemplate().spendTime();
	}
}

abstract class Template {

	public abstract void code();

	public void spendTime() {
		long start = System.currentTimeMillis();

		this.code();

		long end = System.currentTimeMillis();
		System.out.println("花费的时间为:" + (end - start));
	}
}

class SubTemplate extends Template {
	
	public void code() {
		boolean flag = false;
		for(int i = 2;i <= 10000;i++){
			for(int j = 2;j <= Math.sqrt(i);j++){
				if(i % j == 0){
					flag = true;
					break;
				}
			}
			if(!flag){
				System.out.println(i);
			}
			flag = false;
		}
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值