抽象类是与接口是学习
1.抽象类
使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类抽,象图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取图形周长等,在每个派生类中都重写toString()方法,返回所有属性的信息。
父类图形类
public abstract class Graphics implements Comparable{
abstract String CalculationBrushColor(); //颜色
abstract String CalculationFillnot();//填充
abstract double CalculationArea();//面积
abstract double CalculationPerimeter();//周长
@Override
public int compareTo( Graphics g) {
// TODO Auto-generated method stub
int i=0;
if(this.CalculationArea()>g.CalculationArea()){
return i=1;
}else if(this.CalculationArea()==g.CalculationArea()){
return i=0;
}else{
return i=-1;
}
}
}
在父类中有四个抽象方法 在其子类中分别重写这些方法
子类圆形类
public class Circular extends Graphics {
private String color; //颜色
private String fillornot;//填充
private double radius;//半径
public Circular(String color,String fillornot,double radius){
this.color=color;
this.fillornot=fillornot;
this.radius=radius;
}
@Override
String CalculationBrushColor() {
// TODO Auto-generated method stub
String BrushColor=color;
return BrushColor;
}
@Override
String CalculationFillnot() {
// TODO Auto-generated method stub
String Fillnot= fillornot;
return Fillnot;
}
@Override
double CalculationArea() {
// TODO Auto-generated method stub
double Area=Math.PI*radius*radius;
return Area;
}
@Override
double CalculationPerimeter() {
// TODO Auto-generated method stub
double Perimeter=Math.PI*2*radius;
return Perimeter;
}
public String toString() {
return("画了一个"+CalculationBrushColor()+",填充状态为"+CalculationFillnot()+",面积为"+CalculationArea()+",周长为"+CalculationPerimeter()+"的圆");
}
}
在子类中重写了 toString 方法在测试类中直接调用就可以打印出这些信息
测试类 test
public class Test {
public static void main (String[] args){
Graphics re= new Rectangle("红色", "无填充", 10.0, 5.0);
System.out.println(re);
Graphics ci=new Circular("绿色", "有填冲", 3.0);
System.out.println(ci);
Graphics sq=new Square("黄色", "无填充", 4.0);
System.out.println(sq);
// double MaxRectangle = 0;
// Graphics [] arr=new Graphics[30];
// for(int i=0;i<=10;i++){
// arr[i]= new Rectangle(null, null, 5, i);
// MaxRectangle=arr[i].CalculationArea();
// }
//
}
}
执行结果图
接口与接口实现
接口与接口实现用来比较对象返回值回值类型设计为int类型。此方法接收一个参数,参数类型为图形类,将compareTo()方法的返回值设置为1、0、-1,来代表比较结果,当前对象大、两者相等或者当前对象小
接口:public interface Comparable {
public int compareTo(Graphics g);
}
在先前抽象类中实现
public int compareTo( Graphics g) {
// TODO Auto-generated method stub
int i=0;
if(this.CalculationArea()>g.CalculationArea()){
return i=1;
}else if(this.CalculationArea()==g.CalculationArea()){
return i=0;
}else{
return i=-1;
}
测试类abstest
public class AbstTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Graphics []gra=new Graphics[10];
for (int i=0;i<4;i++){
Graphics gr=new Circular(null, null, 2.0+i);
gra[i]=gr;
}
for (int i=4;i<7;i++){
Graphics re=new Rectangle(null, null, 12,2.0+i);
gra[i]=re;
}
for (int i=7;i<10;i++){
Graphics sq=new Square(null, null, 20.0+i);
gra[i]=sq;
}
Graphics max=gra[0];
for(int i=0;i<gra.length;i++){
if(gra[i].CalculationArea()>max.CalculationArea()){
max=gra[i];
}
}
System.out.println("最大面积为"+max.CalculationArea());
}
}
执行的结果:
抽象类与接口的总结:
1.接口不能实例化,不能创建构造方法
2.修饰常量 public abstract final 可以省略
3. 修饰方法 abstract 可以省略
4. 一个类可以实现多个接口,一个接口可以继承一个接口
5.抽象类中可以具有非抽象方法
6. 抽象类不能被实例化
7. 接口可以定义抽象方法(abstract)
8. 接口可以有构造方法为了给子类用
9. 包含抽象类的方法必须定义为抽象类
10. 接口中不能含有非抽象方法
11. 接口被实现时候必须重写接口中所有方法不然要定义为抽象类
注意
在JDK8.0之后接口不仅仅可以修饰 也可以有
全局常量、抽象方法
静态方法、默认方法
接口中的静态方法只能接口本身调用
实现类可以调用默认方法不能调用静态方法// 如果想要调用接口中默认方法,使用“接口名”.super.“方法名”