day 9 抽象类,模板设计模式与接口等

day 9

抽象类
抽象类,abstract. 他没有具体的实例,如果一个类中有一个抽象的方法,那么他必须是抽象类

Q1,建立抽象类Animal,并建立类Dog,类Fish,打印出dog和fish的移动方式.

package day09;

public abstract class Animal {//只写方法不写方法体
	public abstract void test();
	
	public abstract void move();
		
}




class Dog extends Animal{//继承后会报错,在eclipse里,单击类名Dog,点击Add inimplemented methods就可以自动添加重写方法

	@Override
	public void test() {
		
		
	}

	@Override
	public void move() {//重写move
		System.out.println("狗的移动方式是撒欢");
		
	}
	
}



class Fish extends Animal{

	@Override
	public void test() {
		
		
	}

	@Override
	public void move() {
		System.out.println("鱼的移动方式是蹦跶");
		
	}
	
}

在main方法中new一个dog和fish并使用.move方式
打印出dog和fish的移动方式.

	Dog d = new Dog();
	d.move();
	Fish f = new Fish();
	f.move();

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

package day09;

public abstract class Employee {
	
	String name;
	int id;
	double salary;
	
	public Employee(){
		
	}
	
	public abstract void work();
}


class CommonEmployee extends Employee{

	public void setComminEmployeeInfo(String name,int id,double salary) {
		super.name = name;
		super.id = id;
		super.salary = salary;
	}
	public void getComminEmployeeInfo() {
		System.out.println(super.id);
		System.out.println(super.name);
		System.out.println(super.salary);
	}
	@Override
	public void work() {
		System.out.println("这是一个普通员工");
	}
}
	
	
class Manager extends Employee{
	double bonus;
	
	public void setManagerInfo(String name,int id,double salary,double bonus) {
		super.name = name;
		super.id = id;
		super.salary = salary;
		
		this.bonus = bonus;//注意,这里的bonus不要使用super.
	}
	
	public void getManagerInfo() {
		System.out.println(super.name);
		System.out.println(super.id);
		System.out.println(super.salary);
		System.out.println(this.bonus);
	}
	
	@Override
	public void work() {
		System.out.println("这是一个领导");
		
		
	}
	
}

在main方法中调用

CommonEmployee ce = new CommonEmployee();
	ce.setComminEmployeeInfo("zhangsan", 113, 6300.15);
	ce.getComminEmployeeInfo();
	ce.work();
	
	Manager m = new Manager();
	m.setManagerInfo("lisi",114, 123.21, 45401.14);
	m.getManagerInfo();
	m.work();

模板方法设计模式
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板
当功能内部一部分实现是确定,一部分实现是不确定的.
这时可以把不确定的部分暴露出去,让子类实现.
编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法给其子类实现,这就是一种模板

package day09;
/**
 * 模板设计模式
 * @author Administrator
 *
 */
public abstract class Template {
	public abstract void code();
	
	public final void getTime() {
		long start = System.currentTimeMillis();
		code();
		long end = System.currentTimeMillis();
		
		System.out.println("code方法执行的时间: " + (end - start));
	}
}



class TestTemp extends Template{

	@Override
	public void code() {
	
		for(int i = 0;i < 500; i++) {
		
		}
		
	}
	
}

在main方法中,new一个TestTemp对象,使用.getTime()方法调取结果

接口
接口的特点:
用interface来定义
接口中的所有成员变量都默认是由public static final修饰的
接口中的所有方法都默认是由public abstract修饰的
接口没有构造器
接口采用多层继承机制
public interface Runner{
int ID = 1;
void start();
public void run();
void stop();
}
相当于
public interface Runner{
public static final int ID = 1;
public abstract void start();
public abstract void run();
public abstract void stop();
}

新建接口时在包右键new的不是class,而是interface
测试接口时,在class名后使用关键字 implements

package day09;
/**
 * 子类可以继承父类,只能继承一个父类
 * 类可以实现多个接口,多个接口用,分隔
 * @author Administrator
 *
 */
public class TestInImpl implements TestIn,TestIn1{

	@Override
	public void test() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void test1() {
		// TODO Auto-generated method stub
		
	}

}

接口可以继承接口
如果一个类即继承父类,又实现接口
那么先继承,再实现

今天刚到新公司,学习进度缓慢 明天继续接口学习

发布了8 篇原创文章 · 获赞 0 · 访问量 80

猜你喜欢

转载自blog.csdn.net/Reishinj/article/details/105059826