Argol

I am the captain of my soul.
posts - 12, comments - 1, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java中的toString方法在Object中已经存在。由于Java中所有的类都继承自Object类,所以此方法存在于所有对象中,其作用是为了方便所有类的字符串操作。在Java的API文档中指出“建议所有子类都重写此方法”。

对该方法的使用进行如下验证:

class TestA {
    
public String toString() {
        
return "A feedback from TestA.";
    }

}


class TestB {
    
public String getString() {
        
return "A feedback from TestB.";
    }

}


class TestC {
    
public String getString() {
        
return "A feedback from TestC.";
    }

}


class TestD{}

public class SimpleTest {
    
public static void main(String[] args) {
        TestA ta 
= new TestA();
        TestB tb 
= new TestB();
        TestC tc 
= new TestC();
        TestD td 
= new TestD();
        System.out.println(
"From TestA: " + ta);
        System.out.println(
"From TestB: " + tb);
        System.out.println(
"From TestC: " + tc.getString()); 
        System.out.println(
"From TestD: " + td);
    }

    
}

此程序段的输出如下:

From TestA: A feedback from TestA.
From TestB: TestB@14318bb
From TestC: A feedback from TestC.
From TestD: TestD@ca0b6

其中TestA类重写了toString方法,返回字符串,因此可在println中直接输出。TestB和TestC类尝试用另一种方法名重新设置相同的功能,而事实上没有对toString方法进行重写,因此在对TestB的输出中仍然调用原来继承的toString方法,输出“类名+at标记符@+此对象哈希码的无符号十六进制表示”;而在TestC中调用了getString方法,返回自定义的字符串。TestD类中未对toString做任何操作,在主函数中调用时与TestB相同,使用的继承的toString方法,输出与TestB类似。

posted @ 2010-09-17 08:27 Argol 阅读(2602) | 评论 (0)编辑 收藏

在Java语言中,接口可以嵌套在类或其它接口中。由于Java中interface内是不可以嵌套class的,所以接口的嵌套就共有两种方式:class嵌套interface、interface嵌套interface。

1. class嵌套interface
这时接口可以是public,private和package的。重点在private上,被定义为私有的接口只能在接口所在的类被实现。可以被实现为public的类也可以被实现为private的类。当被实现为public时,只能在被自身所在的类内部使用。只能够实现接口中的方法,在外部不能像正常类那样上传为接口类型。

2. interface嵌套interface
由于接口的元素必须是public的,所以被嵌套的接口自动就是public的,而不能定义成private的。在实现这种嵌套时,不必实现被嵌套的接口。

程序示例(摘抄改编自《Thinking in Java》):

class A {
    
private interface D {
        
void f();
    }

    
private class DImp implements D {
        
public void f() {}
    }

    
public class DImp2 implements D {
        
public void f() {}
    }

    
public D getD() return new DImp2(); }
    
private D dRef;
    
public void receiveD(D d) {
        dRef 
= d;
        dRef.f();
    }

}


public class NestingInterfaces {
    
public static void main(String[] args) {
        A a 
= new A();
        
//The type A.D is not visible
        
//! A.D ad = a.getD();
        
//Cannot convert from A.D to A.DImp2
        
//! A.DImp2 di2 = a.getD();
        
//The type A.D is not visible
        
//! a.getD().f();        
        A a2 = new A();
        a2.receiveD(a.getD());
    }

}


其中语句A.D ad = a.getD()和a.getD().f()的编译错误是因为D是A的私有接口,不能在外部被访问。语句A.DImp2 di2 = a.getD()的错误是因为getD方法的返回类型为D,不能自动向下转型为DImp2类型。

posted @ 2010-09-14 20:39 Argol 阅读(3254) | 评论 (1)编辑 收藏

仅列出标题
共2页: 上一页 1 2