您的位置:首页 > 其它

抽象类与接口

2017-06-30 16:55 288 查看

一、抽象类--用extends继承实现(单继承)

package test;

import java.util.*;

abstract class Person
{
private String name;

public Person(String n)
{
name = n;
}

public abstract String getDescription();

public String getName()  //抽象类也可以包含具体数据和具体方法
{
return name;
}
}

class Student extends Person
{
private String major;

public Student(String n, String m)
{
super(n);
major = m;
}

public String getDescription()
{
return "a student majoring in" + major;
}
}

class Employee extends Person
{
private double salary;
private Date hireDay;

public Employee(String n, double s, int year, int month, int day)
{
super(n);
GregorianCalendar cal = new GregorianCalendar(year, month-1, day);
hireDay = cal.getTime();
}

public String getDescription()
{
return String.format("an employee with a salary of $%.2f", salary);
}

public void raiseSalary(double percent)
{
salary *= (1 + percent/100);
}
}

public class Test
{
public static void main(String args[])
{
Person[] people = new Person[2];
people[0] = new Employee("Bob", 10000, 2017, 6, 28);
people[1] = new Student("brain", "Economics");

for(Person p: people)
{
System.out.println(p.getName() + ", " + p.getDescription());
}
}
}

二、接口--用implements实现(多接口)

interface ainterface //定义一个接口
{
int i = 10;	//定义的变量为fianal类型
void method(); //声明接口方法,但不能有方法体{}
}

public class Test implements ainterface //实现接口
{
public void method() //接口的方法在此必须被重写,注意访问修饰符为public
{
System.out.println("interface succeeds!");
}
public static void main(String args[])
{
Test a = new Test();
//a.i = 20; error! 不能修改i的值,为final类型
a.method();	//output:interface succeeds!
}
}

三、抽象类与接口混合编程例子

interface aInterface // 定义一个接口
{
void inter_method(); //这里不需要访问修饰符,在实现中指定
}

abstract class aAbstractClass// 定义一个抽象类
{
public abstract void inter_method(); // 加abstract
}

class Mix extends aAbstractClass implements aInterface // 继承抽象类,实现接口。
{
public String st; // 定义自己的字段

public void inter_method() // 实现接口,注意访问修饰符加public
{
System.out.println("接口方法已加public实现");
}

public void aAbstractClass()// 实现抽象方法
{
System.out.println("抽象类方法已实现");
}
}

public class Test
{
public static void main(String[] args) {
Mix mixObj = new Mix();
mixObj.st = "实现类的字段";
System.out.println(mixObj.st);
mixObj.inter_method();// 实现的接口方法调用
mixObj.aAbstractClass();// 实现的抽象类的方法调用
}
}

四、接口继承接口

interface Moveable
{
void move(double x, double y);
}

interface Powered extends Moveable
{
double SPEED_LIMIT = 95;
double milesPerGallon();
}

五、几点比较

1、 抽象类在java语言中所表示的是一种“is-a”的继承关系,一个子类只能存在一个父类,但是可以存在多个接口。

2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。
3、接口中的所有方法自动地属于public。因此,在接口中声明方法时,不必提供关键字public
4、接口中可以定义常量,但是绝不能含有实例域,也不能在接口中实现方法。因此,可以将接口看成是没有实例域没有实现方法的抽象类,但这两个概念不要混淆
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: