请用通俗易懂的语言或文章链接进行解释。
当前回答
当您想要子类/接口中的父类/接口的属性时,使用extends;当您想要类中的接口的属性的时候,使用implements。
例子:
使用类扩展类父级{}类Child扩展Parent{}使用接口扩展接口父级{}接口子级扩展父级{}机具接口A{}B类实现A{}延伸和机具的组合接口A{}B类{}C类实现A,扩展B{}
其他回答
实现用于接口,扩展用于扩展类。
为了用更简单的术语使它更清晰,界面就像它的声音——一个界面——一个模型,你需要应用它,跟随它,以及你的想法。
Extend用于类,在这里,您通过添加更多功能来扩展已经存在的内容。
还有一些注意事项:
一个接口可以扩展另一个接口。
当您需要为特定场景在实现接口或扩展类之间进行选择时,就开始实现接口。因为一个类可以实现多个接口,但只能扩展一个类。
延伸
类只扩展一个类接口扩展了一个或多个接口
工具
类实现一个或多个接口接口“不能”实现任何内容
抽象类也像类一样,具有扩展和实现
当您想要子类/接口中的父类/接口的属性时,使用extends;当您想要类中的接口的属性的时候,使用implements。
例子:
使用类扩展类父级{}类Child扩展Parent{}使用接口扩展接口父级{}接口子级扩展父级{}机具接口A{}B类实现A{}延伸和机具的组合接口A{}B类{}C类实现A,扩展B{}
extends用于扩展类。
implements用于实现接口
接口和常规类之间的区别在于,在接口中不能实现任何声明的方法。只有“实现”接口的类才能实现方法。C++等价的接口将是一个抽象类(不完全相同,但几乎相同)。
此外,java不支持类的多重继承。这通过使用多个接口来解决。
public interface ExampleInterface {
public void doAction();
public String doThis(int number);
}
public class sub implements ExampleInterface {
public void doAction() {
//specify what must happen
}
public String doThis(int number) {
//specfiy what must happen
}
}
现在扩展类
public class SuperClass {
public int getNb() {
//specify what must happen
return 1;
}
public int getNb2() {
//specify what must happen
return 2;
}
}
public class SubClass extends SuperClass {
//you can override the implementation
@Override
public int getNb2() {
return 3;
}
}
在这种情况下
Subclass s = new SubClass();
s.getNb(); //returns 1
s.getNb2(); //returns 3
SuperClass sup = new SuperClass();
sup.getNb(); //returns 1
sup.getNb2(); //returns 2
此外,请注意,实现接口不需要@Override标记,因为原始接口方法中没有任何内容需要重写
我建议您对面向对象编程中的动态绑定、多态性和一般继承进行更多研究
通常实现用于实现接口,扩展用于扩展基类行为或抽象类。
extends:派生类可以扩展基类。您可以重新定义已建立关系的行为。派生类“是”基类类型
implements:您正在实现合同。实现接口的类“具有”功能。
在java8版本中,接口可以在接口中具有默认方法,这在接口本身中提供了实现。
请参阅此问题以了解何时使用它们:
接口与抽象类(通用OO)
理解事物的榜样。
public class ExtendsAndImplementsDemo{
public static void main(String args[]){
Dog dog = new Dog("Tiger",16);
Cat cat = new Cat("July",20);
System.out.println("Dog:"+dog);
System.out.println("Cat:"+cat);
dog.remember();
dog.protectOwner();
Learn dl = dog;
dl.learn();
cat.remember();
cat.protectOwner();
Climb c = cat;
c.climb();
Man man = new Man("Ravindra",40);
System.out.println(man);
Climb cm = man;
cm.climb();
Think t = man;
t.think();
Learn l = man;
l.learn();
Apply a = man;
a.apply();
}
}
abstract class Animal{
String name;
int lifeExpentency;
public Animal(String name,int lifeExpentency ){
this.name = name;
this.lifeExpentency=lifeExpentency;
}
public void remember(){
System.out.println("Define your own remember");
}
public void protectOwner(){
System.out.println("Define your own protectOwner");
}
public String toString(){
return this.getClass().getSimpleName()+":"+name+":"+lifeExpentency;
}
}
class Dog extends Animal implements Learn{
public Dog(String name,int age){
super(name,age);
}
public void remember(){
System.out.println(this.getClass().getSimpleName()+" can remember for 5 minutes");
}
public void protectOwner(){
System.out.println(this.getClass().getSimpleName()+ " will protect owner");
}
public void learn(){
System.out.println(this.getClass().getSimpleName()+ " can learn:");
}
}
class Cat extends Animal implements Climb {
public Cat(String name,int age){
super(name,age);
}
public void remember(){
System.out.println(this.getClass().getSimpleName() + " can remember for 16 hours");
}
public void protectOwner(){
System.out.println(this.getClass().getSimpleName()+ " won't protect owner");
}
public void climb(){
System.out.println(this.getClass().getSimpleName()+ " can climb");
}
}
interface Climb{
public void climb();
}
interface Think {
public void think();
}
interface Learn {
public void learn();
}
interface Apply{
public void apply();
}
class Man implements Think,Learn,Apply,Climb{
String name;
int age;
public Man(String name,int age){
this.name = name;
this.age = age;
}
public void think(){
System.out.println("I can think:"+this.getClass().getSimpleName());
}
public void learn(){
System.out.println("I can learn:"+this.getClass().getSimpleName());
}
public void apply(){
System.out.println("I can apply:"+this.getClass().getSimpleName());
}
public void climb(){
System.out.println("I can climb:"+this.getClass().getSimpleName());
}
public String toString(){
return "Man :"+name+":Age:"+age;
}
}
输出:
Dog:Dog:Tiger:16
Cat:Cat:July:20
Dog can remember for 5 minutes
Dog will protect owner
Dog can learn:
Cat can remember for 16 hours
Cat won't protect owner
Cat can climb
Man :Ravindra:Age:40
I can climb:Man
I can think:Man
I can learn:Man
I can apply:Man
需要理解的要点:
狗和猫是动物,它们通过分享名字、生命来延长记忆和保护主人猫能爬,但狗不能。狗会思考,但猫不会。通过实施这些功能,这些特定功能被添加到猫和狗中。人不是动物,但他能思考、学习、应用、攀爬
通过这些示例,您可以理解
不相关的类可以通过接口具有功能,但相关的类通过基类的扩展重写行为。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap