Ⅰ java內部類和介面都可以實現多重繼承,但是什麼時候用那種呢
樓主,你好。
我們先拋開代碼的重寫不談,先談一下設計,你認為合理嗎,一個類繼承兩個介面,兩個介面中居然有一相同的方法,那麼這個介面的抽象就出現問題了。所以你這個題僅僅是作為一個理論層次的討論,實際中並不會出現。
其次,就這個問題來說,也許我們在一個實現類中確實就寫了一段print()方法,結果運行確實通過了,也不報錯了,但是樓主我們細想一下,我們達到目的了嗎?這是我們想到的嗎?答案是no,兩個不同的介面,就應該有不同的業務邏輯,怎麼能用一個方法去歸並兩個呢?那我們為什麼不抽象成一個方法呢?好,這樣就回到了我前面說的,屬於設計問題了。
呵呵,就這樣。希望樓主能看透這點,在深究不放,那就是不好啦。
Ⅱ Java匿名內部類可以實現介面嗎
匿名內部類可以用於介面上,只要一個類是抽象的或是一個介面,那麼其子類中的方法都可以使用匿名內部類來實現。最常用的情況就是在多線程的實現上,因為要實現多線程必須繼承Thread類或是繼承Runnable介面。
具體示例代碼如下:
interface
Person
{
public
void
eat();
}
public
class
Demo
{
public
static
void
main(String[]
args)
{
Person
p
=
new
Person()
{
public
void
eat()
{
System.out.println("eat
something");
}
};
p.eat();
}
}
運行結果:eat
something
Ⅲ 關於JAVA內部類向上轉型為介面的問題(第十行)
你的InnerClass 是private 的,在其它類的作用域裡面是不能訪問InnerClass 內部的函數的。
你把private 改成public 就好了,或者在OuterClass2中添加專門的方法調用該內部類的f方法
Ⅳ java介面內部類
package com.clark.app;
/**
* Created with IntelliJ IDEA.
* User: clark
* Date: 13-10-9
* Time: 下午12:07
*/
public class QuestionMain implements ITest{
public static void main(String[] args) {
ITest.TestInternal.test(new QuestionMain());
}
@Override
public void print() {
System.out.println("真正實現方法");
}
}
interface ITest {
void print();
public static class TestInternal {
public static void test(ITest test) {
test.print();
}
}
}
Ⅳ java 為什麼匿名內部類需要介面請詳細基礎一點,只是初學者。
new語句聲明一個新的匿名類,它對一個給定的類進行擴展,或者實現一個給定的介面。它還創建那個類的一個新實例,並把它作為語句的結果而返回。要擴展的類和要實現的介面是new語句的操作數,後跟匿名類的主體
Ⅵ java 內部類 為什麼可以實現介面
這是面向對象編程的特性決定的
以java為例:
既然是匿名內部類,它首先是一個類。所有的類都是繼承自Object的,你實現的匿名類,也就需要繼承某個類。如new Button(){}
實現介面也是一種匿名類聲明的方法,因為你實現的介面是默認繼承Object類的,比如new Runnable(){}
Ⅶ java 內部類 和介面問題
你好,看這兩句代碼。
B b = new B(); //這句好理解吧。就是創建類B的一個實例對象b
b.test();//關鍵看這句,調用test方法。
1. 調用test方法
2. 執行this.get(new C()) ; //這句就會調用類B中的get方法,因為C是介面A的實現類,因此可以做為參數傳遞進去。
3. 根據多態性,執行new C().fun1() ;
4.所以會列印出10
Ⅷ java內部類介面問題
Machine 和 MachineHeart 的關系是 MachineHeart is a Machine
凡是在本來需要Machine的地方都可以使用MachineHeart
getMachine()的返回類型是Machine,返回MachineHeart當然是可以的,而且必須也只能是一個實現的Machine的類的實例.因為介面無法直接創建對象
實現介面和繼承(extends)很相似
一句話:父類的引用可以指向子類實例 (這是多態的基礎)
Ⅸ JAVA內部類使用,什麼時候該使用內部類及使
java中的內部類和介面加在一起,可以的解決常被C++程序員抱怨java中存在的一個問題 沒有多繼承。
每個內部類都能獨立的繼承自一個(介面的)實現,所以無論外圍類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。
1.內部類繼承
因為內部類的構造器必須連接到指向其外圍類對象的引用,所以在繼承內部類的時候使用特殊語法。問題在於,指向外圍類對象的引用必須被初始化,而在導出類中不存在可連接的默認對象。所以必須要用特殊語法來明確說清楚他們之間的關聯。
[java]view plain
classWithInner{
classInner{}
}
.Inner{
InheritInner(WithInnerwi){
wi.super();
}
}
2 內部類覆蓋
當繼承一個外圍類的時候,內部類不會發生什麼變化。當明確的繼承一個內部類時會發生變化。
[java]view plain
publicclassEgg{
privateYolky;
protectedclassYolk{
publicYolk(){
System.out.println("Egg.Yolk");
}
}
publicEgg(){
System.out.println("NewEgg");
y=newYolk();
}
}
[java]view plain
publicclassBigEggextendsEgg{
publicclassYolk{
publicYolk(){
System.out.println("BigEgg.yolk()");
}
}
publicstaticvoidmain(String[]args){
newBigEgg();
}
}
輸出:
New Egg
Egg.Yolk