接口心得

抽象类

1)如果一个类包含一个或多个抽象方法,该类必须被限定为抽象

2)抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。

3)抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。

4)当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在日后子类进行重用,进行具体化。这样,抽象类也就诞生了。

5)如果从一个抽象类继承,并想创建该新类的对象,那么就必须在导出类中为 基类中的所有抽象方法提供方法定义。如果不这样做,那么导出类便也是抽象类,且编译器将会强制我们用abstract关键字限定这个类,无法为抽象类创建对象。

6)Java为此提供了一个叫做抽象方法的机制,这种方法是不完整的;仅有声明而没有方法体。
abstract void f();

public class AbstractDemo1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }
}

// 这就是一个抽象类
abstract class Animal {
    String name;
    int age;

    // 动物会叫
    public abstract void cry(); // 不确定动物怎么叫的。定义成抽象方法,来解决父类方法的不确定性。抽象方法在父类中不能实现,所以没有函数体。但在后续在继承时,要具体实现此方法。
}

// 抽象类可以被继承
// 当继承的父类是抽象类时,需要将抽象类中的所有抽象方法全部实现。
class cat extends Animal {
    // 实现父类的cry抽象方法
    public void cry() {
        System.out.println("猫叫:");

    }
}

接口

Java接口是什么
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征, 没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

abstract关键字允许人们在类中创建一个或多个没有任何定义的方法–提供了接口部分,但是没有提供任何相应的具体实现,这些实现是由此类的继承者创建的。interface这个关键字产生一个完全抽象的类,它根本就没有提供任何具体实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体的方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须宣告为抽象类(Abstract Class)。另外,在Java中,接口类型可用来宣告一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

其中一个使用接口的优势是,可以利用他们模拟多重继承,类在JAVA中不允许多重继承,所有在JAVA中的类必须而且仅能有一个父类,而java.lang.Object(JAVA类型系统中最顶层的类型)是唯一一个例外。

JAVA的类可以被实现许多个接口,然而一个接口则无法实现其他的接口。

当要实现一个接口时,在接口中被定义的方法必须被定义为是public的;否则,它们将只能得到默认的包访问权限,这样在方法被继承的过程中,其访问权限就被降低了,这是Java编译器所不允许的。

interface的默认规则
1)interface中定义的方法和成员变量,默认为public访问权限,且仅能为public
2)interface中的成员变量默认为public static final类型,可通过接口名或者实3)现类名或在实现类中直接调用。
4)一个定义接口的java文件中,interface最多只有一个public,可包含多个不含访问权限修饰词的接口,这些接口的访问权限为包内访问。不能用protected以及private修饰。
5)类中可以嵌套定义接口,访问权限修饰词随意,在对应作用域内,通过类名.接口名继承。
6)接口中可以嵌套定义接口,但遵循第一条规则,即默认(且只能为)public
7)接口中可以定义内部类,但默认(且只能)为public static

接口的定义方式

接口的主体包含着抽象方法,但所有方法在接口内(定义上)都是抽象(Abstract)方法,所以abstract的关键字在接口内则不被需要。由于接口代表着一个对外行为的集合,所以任何方法在接口内都是public(公开的)。

public interface Predator {
       boolean chasePrey(Prey p);
       void eatPrey(Prey p);
}

接口内的成员皆为静态(static)、final及公开(public),反之,他们可以成为任何类或接口的类型

接口的使用解决类只能单继承的问题,因为一个类可以实现多个接口。

那么Java中要如何去实现一个接口并且在实现他的子类中调用接口中的方法呢?

接口的实现方式

public class Lion implements Predator {

        public boolean chasePrey(Prey p) {
               // programming to chase prey p (specifically for a lion)
        }

        public void eatPrey (Prey p) {
               // programming to eat prey p (specifically for a lion)
        }
}

接口通常被使用在Java编程语言,用来做回调函数使用[2] 。Java并不允许方法作为参数传递使用,因此,其中一个解决办法则是可以定义一个接口,把这个接口当成方法的参数,以此来使用该项对象的方法签名。

子接口
接口可以被延伸为数个不同的接口,可以使用上述所描述的方法,举例来说:

 public interface VenomousPredator extends Predator, Venomous {

 }

以上的程序片段是合法定义的子接口,与类不同的是,接口允许多重继承,而Predator 及 Venomous 可能定义或是继承相同的方法,比如说kill(Prey prey),当一个类实现VenomousPredator的时候,它将同时实现这两种方法。

有些泛用的Java接口可供参考:

Comparable
拥有一个方法compareTo,用以描述两个对象是否相等,或是其中一个对象大于另外一个对象。泛型允许已经实现的类,其对象可以用来互相比较。

Serializable 是一个marker interface 没有任何接口或是字段,仅有一个空的主体,它被用来表示一个类可以被序列化。它的Javadoc描述了他是如何运作,而且不需要被强制编程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值