1、抽象类
①定义:就是没有具体实例的类,称为抽象类。关键字abstract修饰的就是抽象类。抽象类中可以定义域也可以定义方法,但不能生成抽象类的实例,因为抽象类的描述是不存在的。定义抽象类的意义在于使行为相似的对象有共同的父类,则可以用父类对象来表示子类对象,从而实现多态性。
②定义的形式:
1)抽象类的定义形式:
absract class 类名
{
//类体;
}
2)抽象方法的定义
abstract 方法类型的方法名([形式参数]);//只有方法的声明,没有方法的实现。
值得注意的是:如果一个类中声明了抽象方法,则该类一定要定义为抽象类。当然抽象类中也可以定义非抽象方法。
abstract class Shape//抽象类的定义
{
public abstract double area();
public abstract double perimeter();
}
class Circle extends Shape
{
private double radius;
public Circle(double radius)
{
this.radius=radius;
}
public double area()//方法重写
{
return Math.PI*radius*radius;
}
public double perimeter()//重写
{
return 2*Math*PI*radius;
}
}
class Rectangle extends shape
{
public Rectangle(double width,double height)
{
this.width=width;
this.heght=height;
}
public double area()
{
return width*heigth;
}
public double perimeter()
{
return 2*(width+heigth);
}
}
public class Main()
{
public static void main(String args[])
{
Shape ashape;//注意不可以分配内存,因为只是抽象的类,抽象类不可以创建对象
//Shape ashape=new Shape 是错的
aShape=new Circle(10);//可以用用抽象的父类对象表示子类对象
Syetem.out .println("圆的面积和周长:");
System.out.println("%.2f,%.2f\n",aShape.area(),aShape.perimeter());
aShape=new Rectangle(15.2,10.8);
Syetem.out .println("矩形的面积和周长:");
System.out.println("%.2f,%.2f\n",aShape.area(),aShape.perimeter());
}
}
2、接口
①定义:接口可以看作是特殊的抽象类,但是他与类又不同。类是对同一事物的描述,但是接口可以对不同类的事物进行描述。接口还可以有多个父接口。接口必须通过类才可以实现。Java不支持多继承(除了Object类之外),但是一个类可以同时实现多个接口。实现接口的过程也就是定义类的过程,但是这个类要定义这个接口中所有的方法。
②定义的形式:
interface 接口名
{
//符号常量定义
//方法声明
}
interface 接口名 extends 父接口列表
{
//符号常量定义
//方法声明
}
③接口的使用
实例:
代码
interface Shape
{
public final static double PI=3.1415926;
public abstract double area();
public abstract double perimeter();
}
calss Circle imlements Shape
{
private double radius;
public Circle(double radius)
{
this.radius=radius;
}
public double area()
{
return PI*radius*radius; //值得注意的是这里的PI并不是Math里的,而是接口里面的
}
public double perimeter()
{
return PI*radius;
}
}
public class Main()
{
public static void main(String args[])
{
shape aShape;
ashape =new Circle(10);
Syetem.out .println("圆的面积和周长:");
System.out.println("%.2f,%.2f\n",aShape.area(),aShape.perimeter());
}
}
3、抽象类和接口的比较
其实从上面的两个实例来看二者是可以替换的。但他们的实质却不同,抽象类用于表示同一类对象的共同属性和行为;而接口可以表示不同类的对象的属性和行为。
实际例子:不同类实现接口
interface Charge
{
public void 收费();//抽象方法
}
class Cinema implements Charge
{
public void 收费()
{
System.out.println("电影票10元一张。");
}
}
class Taxi implements Charge
{
public void 收费()
{
System.out.println("出租车的基础价格时9.9元");
}
}
class Highway implements Charge
{
public void 收费()
{
System.out.println("高数公路收费25.0元");
}
}
class Mian
{
public static void main(String args[])
{
Charge charge;
charge=new Cinema();
charge.收费();
charge=new Taxi();
charge.收费();
charge=new Highway();
charge.收费();
}
运行结果为:
电影票10元一张。
出租车的基础价格时9.9元
高数公路收费25.0元