62,620
社区成员
发帖
与我相关
我的任务
分享
/*
这个是抽象类实现多态的代码
*/
public abstract class A1{
public abstract void fangFa();
public static void main(String[]args){
A1 t = new A2();
t.fangFa();
A1 t1 =new A3();
t1.fangFa();
/*
从这里看来,可以直接在抽象类上进行操作.很简单,很好.容易理解.
*/
}
}
class A2 extends A1{
public void fangFa(){
System.out.println("这里是A2的方法");
}
}
class A3 extends A1{
public void fangFa(){
System.out.println("这里是A3的方法");
}
}
/*
这是一个接口实现多态的代码.
*/
public class A2{
public static void main(String[]args){
JieKou t = new AA();
t.fangFa();
JieKou t1 = new BB();
t1.fangFa();
/*
从这里看来,在接口上还不容许使用main方法,那么我要实现接口的多态的话,
我还要再写个类来把接口和实现类揉在一起.那不是比抽象类麻烦吗?
既然不如抽象类操作起来方便,直观.那为什么还要提出接口这个概念呢?
*/
}
}
interface JieKou{
void fangFa();
}
class AA implements JieKou{
public void fangFa(){
System.out.println("这里是AA实现了接口的方法");
}
}
class BB implements JieKou{
public void fangFa(){
System.out.println("这里是BB实现了接口的方法");
}
}
/*
从这里看来,可以直接在抽象类上进行操作.很简单,很好.容易理解.
*/
/*
从这里看来,在接口上还不容许使用main方法,那么我要实现接口的多态的话,
我还要再写个类来把接口和实现类揉在一起.那不是比抽象类麻烦吗?
既然不如抽象类操作起来方便,直观.那为什么还要提出接口这个概念呢?
*/
public abstract class Employee implements Payable, EmployeeInfo
{
private String name;
private double weeklyPay;
//构造器
public Employee(String name, String address)
{
this.name = name;
this.address = address;
}
//跟个人信息由关的方法
public String getName()
{
return name;
}
public void setName(String n)
{
name = n;
}
//跟薪水有关的方法
public double getWeeklyPay()
{
return weeklyPay;
}
public void computePay(int hoursWorked)
{
weeklyPay = hoursWorked * 6.50;
System.out.println("Weekly pay for " + name + " is $" + weeklyPay);
}
}
//Payable接口只提供跟薪水有关的方法
interface Payable
{
public void computePay(int hoursWorked);
public double getWeeklyPay();
}
//EmployeeInfo接口只提供跟个人信息有关的方法
interface EmployeeInfo
{
public String getName();
public void setName(String n);
}
//如果写一个会计的类,其中的方法把Payable作为参数,会计就只能使用跟薪水有关的方法,而不能修改Employee的个人信息
class Payroll
{
public void payEmployee(Payable p)
{
p.computePay(40);
}
public void printPaycheck(Payable p)
{
System.out.println("Printing check for $" + p.getWeeklyPay());
}
}
//如果再写一个HR的类,其中的方法的参数为EmployeeInfo,那么HR就只能使用跟员工个人信息有关的方法,而不能看到薪水等
class HumanResources
{
public String getInfo(EmployeeInfo e)
{
return e.getName() + " " + e.getAddress();
}
public void changeName(EmployeeInfo e, String name)
{
System.out.println("Changing name for " + e.getName());
e.setName(name);
System.out.println("New name is " + e.getName());
}
}
//这样一来,通过接口,Employee类就可以提供部分方法给该类的用户使用,而不会暴露其他的方法,这个是接口的作用之一