您的位置:首页 > 编程语言 > Java开发

Java编程思想——第七章续

2014-01-18 15:13 309 查看
名称屏蔽:
Java的基类拥有某个被多次重载的方法,在导出类中重新定义该方法名称不会屏蔽其在基类任何版本的(与C++)不同。所以,在该层或者其他基类中对方法进行定义,重载机制都可以工作。
class Homer{
    char doh(char c){
        System.out.println("doh(char)");
    }
    float doh(float f){
        System.out.println("doh(float)");
    }
}
class Milhouse exteds Homer{
    void doh(){
        System.out.println("doh(Milhouse)");
    }
}
public void Hide{
    public static void main(String[] args){
        Bart b = new Bart();
        b.doh();
        b.doh('f');
        b.doh(6.5)
    }
}

@Override:防止重载。
class Lisa extends Homer{
    @Override void doh(){
        System.out.println("hello");
    }
}
//method does not override a method from its superclass

在组合与继承之间选择:
组合显示地在新类中放置子类对象,继承是隐式的。组合是用于在想在新类中使用现有类的功能而并非它的接口。类的使用者这时看到的是新类的接口方法,而不是现有类的接口方法,现有类被隐藏了,但却用到了现有类的方法,用现有类实现了一些功能。现有类的private对象。has-a
继承是用于将现有类改变,实现特殊功能,接口没变,功能,方法变了。is-a

protected:包类访问权限,导出类访问权限。对类用户隐藏了。private的权限不能达到这一点。

向上转型:很好理解。动物导出哺乳动物,一个哺乳动物当然可以说成是动物而运用动物的方法啦!再想一下组合与继承,如果必须向上转型,继承是必要的,否则要考虑是否真的需要继承。

final:
1、一个永不要改变的编译常量。
2、或者是一个在开始时被初始化后不希望被改变。
一个static有时final的域占据一段不能改变的存储区域。
final一个对象时表示指向这个对象不能被改变了,不能指向其他同类对象,就像指针指向一块区域,并一直指向这块区域。但对象自身可以被修改。适用于数组。
空白final:在构造器中初始化一个引用。
final参数:不可以在方法中改变参数的值。
final方法:
1、把方法锁定,防止任何继承修改它的含义(设计方面)
2、确定在继承中使方法行为保持不变,并且不会被覆盖。
现在很少考虑final影响效率的问题。
private被指定为final,一个类中一个方法被指定为private,编写其子类不会编译出错,但这个方法不会被覆盖,本类private方法仍在本类中使用,子类private方法仍在子类使用,互补影响。
final类:这个类不允许被继承。

初始化及类的加载:
你写类的顺序就是加载的顺序,貌似递归,用到哪一个就加载哪一个,然后回来继续这个。我们似乎不用考虑这些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: