指声明为abstract的类就抽象类。
抽象类不能实例化,只能实例化抽象类的非抽象子类对象。
抽象方法
----------------------<实例>----------------
抽象类不能实例化,只能实例化抽象类的非抽象子类对象。
有抽象方法的类一定是抽象类
抽象类不一定有抽象方法抽象的概念:形状、美女、菜,水果....
public abstract class A
{
}
public class Test
{
public static void main(String[] args)
{
A a=new A();//错误,抽象类不能被实例化
}
}
抽象方法
就是没有方法体的方法。且要声明为abstract。
public abstract class A
{
public abstract void fn();
public void m()
{
}
}
//可以实例化抽象类的非抽象子类对象
public class B extends A
{
B b=new B();
public void fn(){}//父类有抽象方法,子类必须实现。
//如果不实现,则子类必须为abstract类
}
总结:父类有抽象方法,子类必须实现。如果不实现,则子类必须为abstract类。
----------------------<实例>----------------
public abstract class Shape
{
public abstract double getCircle();
public abstract double getArea();
}
public class Tirgle extends Shape
{
int a,b,c;
double p=0.0;
Tirgle(int a,int b,int c)
{
this.a=a;
this.b=b;
this.c=c;
this.p=(a+b+c)/2.0
}
public double getCircle()
{
return a+b+c;
}
public double getArea()
{
return Math.sqrt(P*(p-a)*(p-b)*(p-c));
}
}
public class Circle extends Shape
{
int r;
final double PI=3.14;
Circle(int r)
{
this.r=r;
}
public double getCircle()
{
return 2*PI*r;
}
public double getArea()
{
return PI*r*r;
}
}
class Test
{
Shape s=new Tirgle(3,4,5);
System.out.println("周长是:"+s.getCircle());
System.out.println("面积是:"+s.getArea());
Shape s=new Circle(10);
System.out.println("周长是:"+new DecimalFormat("#0.00").format(s.getCircle()));
System.out.println("面积是:"+s.getArea());
}