1、 instanceof 这是一个运算符,只能够返回 true 或者 false
用法:
x instanceof y
判断 x 是否为 y 的一个实例
2、抽象 abstract :1) 任何类都可以抽象
2)空类抽象作为标识类
3)类中有一个抽象方法,该类必为抽象类
4)抽象类不能实例化
5)抽象类通过继承来实现
6)抽象类可以包含非抽象的方法
7)静态、构造方法不能抽象
用法:
abstract class 类名{
abstract 返回值类型 方法名(参数列表);// 因为是抽象方法不能实现,不能再参数列表之后写入语句块 { }
}
下面讲述一个例子来帮助理解:
abstract class Employee{ //Employee 为一个抽象类
private String name; //私有属性
private String number;
public Employee(){ } //无参构造方法,当你重新写入了一个有参构造方法,一定要再写一个无参的,防止覆盖
public Employee(String name,String number){ //有参构造方法
this.name=name;
this.number=number;
}
public String getName(){
return name;
}
public String getNumber(){
return number;
}
public abstract double earnings();
public String toString(){
return "姓名:"+name+"\t社保号码"+number;
}
}
下面是月薪雇员 和 时薪雇员 对抽象父类的继承和实现
class SalariedEmployee extends Employee{ //继承了Employee 抽象类
private double weeklysalary;
public SalariedEmployee(){ }
public SalariedEmployee(String name,String number,double weeklysalary){
super(name,number); // name 和 number 都是继承父类 Employee 的属性
setWeeklysalary( weeklysalary);
}
public void setWeeklysalary(double weeklysalary){
if(weeklysalary>100){
this.weeklysalary=weeklysalary;
}else{
this.weeklysalary=100;
}
}
//下面是对抽象类中的 earnings 和 toString 方法的重写
public double earnings( ){
return weeklysalary;
}
public String toString(){
return super.toString()+"\t月薪:"+weeklysalary;
}
}
class HourlyEmployee extends Employee{ //继承了Employee 抽象类
private int hours;
private double wage;
public HourlyEmployee(){ }
public HourlyEmployee(String name,String number,int hours,double wage){
super(name,number);
setHours(hours);
this.wage=wage;
}
public void setHours( int hours ){
if(hours>48){
this.hours=hours;
}else{
this.hours=48;
}
}
public void setWage( double wage ){
if(wage>10){
this.wage=wage;
}else{
this.wage=10;
}
}
//下面是对抽象类中的 earnings 和 toString 方法的重写
public double earnings(){
if(hours>40){
return 40*wage+(hours-40)*wage*1.5;
}else{
return 40*wage;
}
}
public String toString(){
return super.toString()+"\t时新:"+earnings();
}
}
测试类比较简单,大家可以自己试着写写,本人写的简单源代码也有上传。四个类全部在同一文件中,所以上述三个类都没有 public 权限。