zoukankan      html  css  js  c++  java
  • Java解惑七:很多其它类之谜

    谜题66

    继承的问题。
    对于实例方法:命名同样时,子类会覆写父类的方法,且訪问权限至少和父类一样大。
    对于域:命名同样时,子类会隐藏父类的域,且訪问权限随意。

    谜题67

    不要重用库中的类名。

    谜题68

    命名的问题。
    类名应该以大写字母开头,形式为:MixedCase。
    变量以小写字母开头,形式为:mixedCase。
    常量以大写字母开头,形式为:MIXED_CASE。
    单个大写字母,仅仅能用于类型參数,形式为:Map<K, V>。
    包名应该都是小写,形式为:lower.case。
    当一个变量和一个类型具有同样的名字,而且作用于同样的作用域时,变量名具有优先权。
    即:变量名遮掩(obscure)类型名。相同变量名和类型名能够遮掩包名。
    class X {
    	static class Y {
    		static String Z = "Black";
    	}
    	static C Y = new C();
    }
    class C {
    	String Z = "White";
    }
    public class ShadesOfGray {
    	public static void main(String[] args) {
    		System.out.println(X.Y.Z); //输出结果是:White
    	}
    
    }

    谜题69

    怎样引用上题中的被遮掩的类型名。
    技巧在某一种特殊的语法上下文环境中使用该名字,语法上下文环境同意出现一个类型名可是不同意出现变量。
    技巧一
    <span style="font-size:18px;">		System.out.println(((X.Y)null).Z);</span>
    技巧二
    <span style="font-size:18px;">static class Xy extends X.Y{};
    System.out.println(Xy.Z);</span>
    技巧三: 5.0版本号之后
    <span style="font-size:18px;">public static <T extends X.Y> void main(String[] args) {
           System.out.println(T.Z);
    }</span>

    谜题70

    具有包内訪问权限修饰的方法的类,在其它包内被继承时,该方法不可能被覆写。
    即使是方法名同样,也是两个不同的方法。

    谜题71

    名字重用导致遮蔽(shade):一个声明仅仅能遮蔽类型同样的还有一个声明。
    静态导入Arrays.toString,当在类中使用toString()时,会调用Object类中的toString方法。

    谜题72

    名字重用的问题。
    final修饰符
    对于方法:实例方法不能覆写,静态方法不能隐藏。
    对于域:不能被赋值超过一次。因此能够被隐藏。

    谜题73

    遮蔽:被遮蔽类型能够来自外围类,而不是来自库。
    隐藏:本来调用的父类的变量,结果声明了一个同名的私有的变量。

    谜题74

    重载方法要确定全部的重载版本号一致。

    谜题75

    版本号升级后带来的不一致,了解就可以。

    名字重用术语表

    覆写(override)

    一个实例方法能够覆写(override)在其超类中可訪问大的具有同样签名的全部实例方法,从而能动态分派,,VM将基于实例执行期类型来选择要调用的覆写方法。
    class Base {
         public void f(){}
    }
    class Derived extends Base {
        public void f() {} //override Base.f()
    }

    重载(overload)

    同一个类中,方法名同样,签名不同。重载的方法是编译期选定的
    class A {
         public void f (int i){}
         public void f (String s)  {}
    }

    隐藏(hide)

    子类中的一个域、静态方法或成员类型能够隐藏超类中可訪问到具有同名的全部与、静态方法或成员类型。
    隐藏一个成员将阻止其被继承。
    class Base {
         public static void f() {}
    }
    
    class Derived extends Base {
         public static void f() {}
    }

    遮蔽(shadow)

    变量、方法或类型能够遮蔽文本范围内具有同样名字的全部变量、方法、或类型。
    class WhoKnows {
          static Stirng sentence = "I do not know";
            public static void main(String [] args) {
                  String sentence = "i know"; //shadow static field
                   system.out.println(sentence);
             }
    }

    遮掩(obscure)

    变量能够遮掩同一范围内同样名字的类型,
    变量或者类型能够遮掩一个包。
    public class Obscure {
        static String System; //Obscures type java.lang.System
        public static void main(String[] args) {
         	System.out.println("hello"); //won't compile
        }
    }

  • 相关阅读:
    尾递归
    Appium环境搭建
    虚拟机与主机的相互访问,虚拟机访问外网
    Python
    npm i 安装
    redis过期键删除策略
    Redis的过期策略和内存淘汰机制
    redis的两种持久化方案
    JVM 方法内联
    进程/线程/协程
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4341247.html
Copyright © 2011-2022 走看看