1、关于try,catch语句作用域的问题
try {
int i = 9;
} catch (Exception e) {
System.out.println(i);
}
这个表达式发生如下错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
j cannot be resolved to a variable
这说明try,catch的作用与是以大括号{}为界,并不是以try,catch语句为界的。
2、只有类文件内部的类可以设置protected/private
private和protected不能修饰外部类的原因
类的成员变量和方法可以使用private和protected修饰。
使用private修饰,表示该类的成员只能在类的内部访问。
使用protected修饰,表示该类的成员可以被类的内部、同包下的其它类以及该类的子类访问。
从组织结构来分析:
类的成员(包过变量、方法、内部类等)的上层结构是类,而类的上层结构是包。
如果类可以使用private来修饰,表示该包下的这个类不能被其它类访问,那么该类也失去了存在的意义,所以不能使用private来修饰类。
如果类可以使用protected来修饰,表示该类所在的包的其它类可以访问该类;该类所在的包的子包的类可以访问该类,但是包没有继承的概念,所以后一句是不对。所以用protected来修饰类也是没有意义的。
综上,类只有public和default修饰。
3、接口中方法的访问权限默认是public
下面的代码是练习策略模式的代码。有一个java语言错误
class a {
public static void main(String[] args) {
System.out.println("hello");
context c = new context(new manSay());
c.doSay();
}
}
interface say {
void doSay();
}
class manSay implements say {
void doSay() {
System.out.println("man say.............");
}
}
class womenSay implements say {
void doSay() {
System.out.println("women say.............");
}
}
class context {
say say1;
context(say s1) {
this.say1 = s1;
}
void doSay() {
say1.doSay();
}
}
以上代码不能通过编译
下面是错误提示:
java: s.manSay中的doSay()无法实现s.say中的doSay()
正在尝试分配更低的访问权限; 以前为public
原因一:
JAVA 接口中成员变量修饰符都是 public static final
成员方法修饰符都是 public abstract
不管你写不写,都会默认成这样,可以漏写但是不能错写这是java权限的规定
原因二:
类实现接口的方法,权限没写,默认是default,这样即把原来的pulic权限,缩小为default,这违反
里氏替换原则的要求。该表述为
“派生类(子类)对象可以在程式中代替其基类(超类)对象。”