黑马程序员----【javaSE基础】个人总结--abstract class和interface的区别

------- android培训java培训、期待与您交流! ----------



相似处:


1.interface的方法全部都没有“实现部分”(body区);
   而abstract类能拥有abstract方法,这些方法也都没有“实现部分”(body区);
2. interface和abstract类都不能直接用来建立对象实例,必须由一个标准的“一般类”去继承它(implements或extends),实现这些没有“实现部分”(body区)的方法,然后再以次“一般类”建立对象实例。

差异处:
1.interface没有构造函数;但abstract类有构造函数。
2.interface不允许其内任何方法拥有“实现部分”;但abstract类允许拥有一般非abstract的方法
,它们就一定有“实现部分“。
3.interface没有内置的super和this变量;abstract类则有。
4.interface的成员变量一定是常数(final的变量);但abstract类的成员变量,皆按照标准的一般类的成员变量。

5.interface所有成员的封装等级都是public,故定义成员时不可加public之外的其他封装修饰符;但abstract类的成员可以是任何封装等级,也就是它的成员可加任何封装修饰符。




/*
创建一个抽象类Draw,在抽象类中定义一个名称为drawRect()的抽象方法,再创建此
抽象类的子类Exampl,练习抽象类的使用。 
ps:在创建抽象类时,要使用abstract关键字来定义抽象类。
抽象类中定义抽象方法,同样需要使用abstract关键字来定义。
继承抽象类,必须重写抽象类中所有抽象方法。*/
abstract class Draw {              //定义抽象类
   public abstract void drawRect(double w,double h);

}
public class Exampl extends Draw{        //实现抽象类
   public void drawRect(double w,double h){
      System.out.println("矩形的宽和高分别是:"+w+"和"+h);
   }
   public static void main(String[] args){
      Exampl ex=new Exampl();
      ex.drawRect(100,50);                //调用方法输出矩形的宽和高
   }
}



/*
创建一个接口,在该接口中定义一个计算面积的getArea()方法,然后创建一个引用实现接口的类,在方法getArea()中实现面积的计算。
定义接口需要使用关键字interface
接口中的方法都是抽象方法。不包含方法体。
要实现接口需要使用implements关键字。
实现接口必须重写接口中的所有方法。*/
interface Area {
   public double getArea(double r);
}
public class Exampla implements Area {        // 创建引用接口的类
   private double r = 0f;                    // 声明半径

   private double getR() {
      return r;
   }

   private void setR(double r) {
      this.r = r;
   }

   public double getArea(double r) {      // 实现接口中的方法
      double area = Math.PI * r * r;
      return area;
   }

   public static void main(String[] args) {
      Exampla ex = new Exampla();
      ex.setR(10.0);                      // 为半径赋值
      System.out.println("半径是" + ex.getR() + "的圆的面积是:"
            + ex.getArea(ex.getR()));
   }
}

/*
建立两个接口,每个接口中各定义一个方法,创建一个类,使该类引用这两个接口,练习多接口的引用。
ps: 类实现接口,必须使用关键字implements
Java中不可以同时继承两个类,但是可以同时实现多个接口,要实现的接口之间使用逗号分隔。
*/
interface Move{                        //定义接口Move
   public void startMove(String move);
}
interface Speak{                                                        //定义接口Speak
      public void startSpeak(String speak);
}
public class Examplc implements Move,Speak{
      public void startMove(String move){           //实现接口Move中的方法
            System.out.println(move);
      }
      public void startSpeak(String speak){          //实现接口Speak中的方法
            System.out.println(speak);
      }
      public static void main(String[] args){
            Examplc ex=new Examplc();
            ex.startMove("开始移动了......");
            ex.startSpeak("开始说话了......");
      }
}


------- android培训java培训、期待与您交流! ----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值