在我的一次访谈中,我被要求解释Interface和Abstract类之间的区别.
这是我的回答:
Java接口的方法是隐式抽象的,不能有实现.Java抽象类可以具有实现默认行为的实例方法.
在Java接口中声明的变量默认为final.抽象类可能包含非最终变量.
默认情况下,Java接口的成员是公共的.Java抽象类可以具有类似私有,受保护等类通常的类成员.
应使用关键字"implements"实现Java接口; 应使用关键字"extends"扩展Java抽象类.
接口只能扩展另一个Java接口,抽象类可以扩展另一个Java类并实现多个Java接口.
Java类可以实现多个接口,但它只能扩展一个抽象类.
然而,面试官并不满意,并告诉我这个描述代表了" 书本知识 ".
他告诉我一个更实际的回答,解释我何时会使用实际例子在界面上选择一个抽象类.
我哪里做错了?
假设你有一个界面
public interface Change {
void updateUser();
void deleteUser();
void helpUser();
}
Run Code Online (Sandbox Code Playgroud)
我已经读过接口是Java实现多重继承的方式.您实现了一个接口,然后您可以访问其方法.我不明白的是,这些方法在界面中没有任何主体,所以你需要在你的类中给它们一个主体.因此,如果您的接口由多个类实现,则需要在多个类中为该方法提供一个主体.为什么这比在类中使用单独的方法更好,而不是实现接口?
我的问题很简单:如果它们是由单个类实现的,那么使用接口是否有任何优势?
我一直认为只有当该接口有多个实现时,接口才是好的.
谢谢.
可能重复:
Java接口实际上是如何使用的?
我不是从一个学术流行语的观点来谈论,而是从一个实际的开发者的角度来看.
举个例子: -
Class1 implements Interface
public String methodOne() {
return "This is Class1.methodOne()";
}
public String methodTwo() {
return "This is Class1.methodTwo()";
}
}
Class2:
Class2 implements Interface
public String methodOne() {
return "This is Class2.methodOne()";
}
public String methodTwo() {
return "This is Class2.methodTwo()";
}
}
Run Code Online (Sandbox Code Playgroud)
使用界面: -
Client {
Interface intface = new Class1();
intface.methodOne();
intface.methodTwo();
Interface intface = new Class2();
intface.methodOne();
intface.methodTwo();
}
Run Code Online (Sandbox Code Playgroud)
但是,与写作相比有什么好处: -
Client {
Class1 clas1 = new Class1();
clas1.methodOne();
clas1.methodTwo(); …Run Code Online (Sandbox Code Playgroud) 声明集合的区别是什么
public class CatHerder{
private List cats;
public CatHerder(){
this.cats = new ArrayList<Cat>();
}
}
//or
public class CatHerder{
private ArrayList cats;
public CatHerder(){
this.cats = new ArrayList();
}
}
//or
public class CatHerder{
private ArrayList<Cat> cats;
public CatHerder(){
this.cats = new ArrayList<Cat>();
}
}
Run Code Online (Sandbox Code Playgroud) 我一般都需要有关接口的帮助......
你们推荐我的任何资源?
我有两个程序.
第一个没有'Buffer'接口,第二个是'Buffer'接口.
两个程序都给我相同的输出.
我的问题是.
为什么我需要创建"缓冲"接口,而我可以在没有接口的情况下获得相同的输出?
这是我的两个程序:
没有接口:
public class MainClass {
public static class producer {
maintainBuffer bf;
producer(maintainBuffer buffer) {
this.bf = buffer;
}
public void setData() {
for (int i = 0; i <= 10; i++) {
bf.set(i);
}
}
}
public static class reader {
maintainBuffer bf;
reader(maintainBuffer buffer) {
this.bf = buffer;
}
public void getData() {
System.out.println("From Reader Class:-" + bf.get());
}
public void extraData() {
System.out.println("Extra DATA");
}
}
public static class maintainBuffer { …Run Code Online (Sandbox Code Playgroud) 在多态性的C#示例中,有一个Cat类,它继承了一个名为AnimalBase的类和一个名为IAnimal的接口.
相关链接是:http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming
我的问题是,为什么要使用基类和接口?为什么不是一个或另一个?我认为只有一个抽象类才能实现多态性.
谢谢
您可以compareTo在不实现Comparable接口的情况下在类中定义方法
.实现Comparable
界面有什么好处?
java ×10
interface ×9
oop ×6
inheritance ×2
arraylist ×1
collections ×1
comparable ×1
list ×1
php ×1
theory ×1