一个是继承,一个是实现接口
- public inerface Runner
- {
- int ID = 1;
- void run ();
- }
-
- //定义一个interface Animal,它继承于父类Runner
- interface Animal extends Runner
- {
- void breathe ();
- }
-
- //定义Fish类,它实现了Animal接口的方法run()和breather()
- class Fish implements Animal
- {
- public void run () //实现了Animal方法run()
- {
- System.out.println("fish is swimming");
- }
- public void breather()
- {
- System.out.println("fish is bubbing");
- }
- }
二abstract和interface
象类:abstract
抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。
格式如下:
包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2)抽象类不能用来创建对象,但是它可以有构造方法,用来帮助子类实例化。
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
接口:Interface
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口的主要特点:
1、接口中的成员变量默认都是public、static、final类型的,必须被显示初始化。
2、接口中的方法默认都是public、abstract类型的。
3、接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。
4、接口没有构造方法,不能被实例化。
5、一个接口不能实现另一个接口,但它可以继承多个其他接口。
6、接口必须通过类来实现它的抽象方法。
7、与子类继承抽象父类相似,当类实现了某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。
8、一个类只能继承一个直接的父类,但能实现多个接口。
1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法(调用时,不用实例化类);
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5)抽象类中的方法子类必须全部实现,不然子类也是抽象类,而接口中的抽象方法子类必须全部实现,是可选择实现的。
6)抽象类是一种模板设计模式,而接口是一种行为规范。
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
由于架构设计上的差异,Java泛型和C++模板还有如下很多不同点;
1. C++模板可以使用int等基本数据类型。Java则不行,必须转而使用Integer
2. Java中,可以将模板的类型参数限定为某种特定类型。例如,你可能会使用泛型实现CardDeck,并规定参数必须扩展自CardGame。
3. C++中,类型参数可以实例化,Java不可以实例化
4. Java中,类型参数(即MyClass<Foo>中的Foo)不能用于静态方法和变量,因为他们会被MyClass<Foo>和MyClass<Bar>共享。但在C++中,这些类是不同的,类型参数可以用于静态方法和静态变量。
5. 在Java中,不管类型参数是什么,MyClass的所有实例都是同一类型。类型参数会在运行时被抹去。而C++中,参数类型不同,实例类型也不同
Java的泛型和C++模板,虽然在很多方面看起来都一样,实则大不相同。