抽象类和接口

                 抽象类和接口

抽象类

类中定义一些不含方法体的方法,它的方法体实现交给该类的子类根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的类就是抽象类。包含的抽象方法一个或多个。。

 

定义规则:

A.      抽象类abstract修饰符来修饰,抽象方法用abstract来修饰

B.      抽象类不能实例化(就是不能用new 去生成对象)

C.      抽象方法只需声明,不需实现,

D.      抽象方法的类必须声明是抽象类,抽象类的子类必须覆盖所有抽象方法后,才能被实例化,否则还是个抽象类

 

 

abstract int aaint a{} // 错,有花括号,有实现部分,只不过为空、、、

正确的形式是:abstract int aaint a);

抽象类中抽象的方法,必须有关键字abstract

 

Vehicle v = new Car(); 正确

// 多态的体现,虽然抽象类不可以创建对象,但是可以声明一个变量,引用可以实现了抽象方法的的子类对象

 

子类可以继承抽象类的属性和方法(和普通类继承一样),父类抽象类定义非private的成员变量,子类可以继承

 

 

接口(interface

如果一个抽象类的所有方法都是抽象的,就可以将这个类用另外一种方式定义,用接口定义。

接口是抽象方法和常量值的集合,从本质上讲,接口是一种特殊的抽象类,其中没有变量和方法实现。

定义:

 

public interface Runner{

   int ID=1;

   void run( ); 不用abstract修饰!!这点和抽象类不同。。abstract也可以。

}

接口的特点

u       在接口里只能声明抽象方法。

u       接口只能声明常量(final)

u       接口里只能声明public的访问权限

  int ID = 1; 相当于public static final int ID = 1;

接口定义中成员默认都是public访问类型的,

变量默认都是public static final标识的,所以接口中定义的变量都是全局静态常量

 

用法:

u       定义一个新接口,用extends继承一个已有接口

u       定义一个类,用implements去实现一个接口中所有方法

u       定义一个抽象类,用implements去实现已有接口中的部分方法

u       可以实现多态,例子如下

  Fly[] flys = new Fly[2];

    //可以实现多态,只要实现了接口Fly的类的对象都可以用flys中元素指向

    flys[0] = new Plane();

    flys[1] = new Bird();

但是只能直接访问该接口中的定义的方法,如果要调用另外一个接口中定义的方法,要进行格式转换

Sing s = new Plane();

       s.sing();

       if (s instanceof Fly){ // 飞机实现了Fly,和Sing两个接口

           ((Fly)s).fly();

       }  

u       多个接口,用逗号分隔。例如:class A implements Fly, Sing{};

 

 

 

 

 

请说说接口和抽象类的区别?

面试频率最高的JAVA问题 估计90%的人都答不好

 

我的答案是:
1.
从使用目的来看:
  
接口只是一个类间的协议,它并没有规定怎么去实现;
  
抽象类可以重用你代码使你的代码更加简洁;
2.
从行为来看:
  
接口可以多继承,multi-implement
  
抽象类不能实例化,必须子类化才能实例化;

3.
从属性来看:
  
接口的属性必须是常量;即public static final;
  
抽象类的属性没有要求;
4.
从方法来看:
  
接口的每个方法只是声明不包括内容;
  
抽象类的方法即可以是抽象的也可以不是抽象的;一般至少有一个是抽象的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值