请用通俗易懂的语言或文章链接进行解释。
当前回答
通常实现用于实现接口,扩展用于扩展基类行为或抽象类。
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
需要理解的要点:
狗和猫是动物,它们通过分享名字、生命来延长记忆和保护主人猫能爬,但狗不能。狗会思考,但猫不会。通过实施这些功能,这些特定功能被添加到猫和狗中。人不是动物,但他能思考、学习、应用、攀爬
通过这些示例,您可以理解
不相关的类可以通过接口具有功能,但相关的类通过基类的扩展重写行为。
其他回答
extends用于从基类继承时(即扩展其功能)。
implements用于实现接口时。
这里是一个很好的开始:接口和继承。
扩展:用于将父类的属性获取到子类中,并且可能包含已定义的方法,这些方法可以在子类中重写。
Implements:这用于通过在子类中定义接口来实现接口(仅具有函数签名而不具有函数定义的父类)。
有一个特殊的条件:“如果我希望一个新接口成为现有接口的子接口怎么办?”。在上述条件下,子接口扩展父接口。
当子类扩展一个类时,它允许子类继承(重用)和重写在父类型中定义的代码。当类实现接口时,它允许在任何期望接口值的上下文中使用从该类创建的对象。
这里真正的问题是,当我们实现任何东西时,这仅仅意味着我们在使用这些方法。它们的值和返回类型没有任何变化的余地。
但是当我们扩展任何东西时,它就变成了类的扩展。您可以更改它,使用它,重用它,它不一定需要返回与在超类中相同的值。
如下图所示,一个类扩展另一个类,一个接口扩展了另一个接口,但一个类实现了一个接口。
有关详细信息
通常实现用于实现接口,扩展用于扩展基类行为或抽象类。
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字符串—查看字符串是否只包含数字而不包含字母
- Mockito.any()传递带有泛型的接口
- 在IntelliJ 10.5中运行测试时,出现“NoSuchMethodError: org.hamcrest. matcher . descripbemismatch”
- 使用String.split()和多个分隔符
- Java数组有最大大小吗?
- 在Android中将字符串转换为Uri
- 从JSON生成Java类?
- 为什么我不能继承静态类?
- 为什么java.util.Set没有get(int index)?
- Swing和AWT的区别是什么?
- TypeScript中的extends和implements有什么区别
- 为什么Java流是一次性的?
- 四舍五入BigDecimal *总是*有两位小数点后
- 设计模式:工厂vs工厂方法vs抽象工厂