请教高手接口相对于抽象类的优点(多继承除外) 请教高手接口相对于抽象类的优点(多继承除外),是优点,不是区别,一个面试官这么问我的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想到一个,接口可以用来做标记用,比如java.io.Serializable 接口,没有声明方法,实现这个接口来标记可序列化。然后除了多继承想不出其它的了,期待高手。 也不一定,你看看java io的设计 还有java中 Integer,Double 等等都是集成Number类的 接口相比于抽象类的优点之一是:通过接口,可以把一个类的某些方法,而不是所有方法,提供给类的用户使用,而抽象类无法实现这种效果请看下面这个雇员的例子,其中定义了修改个人信息和计算薪水的方法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抽象类就可以提供部分方法给该类的用户使用,而不会暴露其他的方法,这个是接口相对于抽象类的优点之一 急!!帮忙解决 问题详情如下 一个普通的APPLET,导致IE闪烁!!! JDK1.4.1该版本谁提供一个下载? 面试题: 高手请进!>=500分相赠 关于java拖动对话框的标题栏的问题,实现代码在哪里? 所有分都放出来了,JAVA中读properties文件的问题 JavaAPI 郁闷郁闷郁闷郁闷郁闷郁闷散散分 Netscape 的APPLET问题 菜问题:无法从静态上下文中引用非静态变量 学习一下。
请看下面这个雇员的例子,其中定义了修改个人信息和计算薪水的方法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抽象类就可以提供部分方法给该类的用户使用,而不会暴露其他的方法,这个是接口相对于抽象类的优点之一