我有这个演示代码:
class Test2 extends Test {
public int number = 0;
@Override
public void set(){
number = 1;
info();
}
@Override
public void info(){
System.out.println(number);
}
}
public class Test {
public Test(){
set();
}
public void set(){
}
public void info(){
}
public static void main(String[] args){
Test2 object = new Test2();
object.info();
}
}
Run Code Online (Sandbox Code Playgroud)
代码给出了这个输出:
1
0
Run Code Online (Sandbox Code Playgroud)
为什么?我期待这个输出:
1
1
Run Code Online (Sandbox Code Playgroud)
在我的opionion中,main函数调用Test2类的构造函数来创建一个对象.构造函数自动调用超类'构造函数.此构造函数调用被覆盖的方法set().因此调用类Test2的方法set().此方法设置字段并调用写入数字的info()方法.然后main函数再次调用创建的对象的info()方法.
正确设置数字字段,因为第一行输出为"1".但为什么第二行包含0?看来这个领域根本没有设定.你能解释一下吗?
我该怎么做才能得到我期望的行为?提前致谢!
执行的Python代码:
class Test(object):
item = 0
def __init__(self):
print(self.item)
def test(self):
print(self.item)
class Subclass(Test):
item = 1
s = Subclass()
s.test()
Run Code Online (Sandbox Code Playgroud)
得到:
1
1
Run Code Online (Sandbox Code Playgroud)
执行类比Java代码:
public class Test {
int item = 0;
Test(){
System.out.println(this.item);
}
void test(){
System.out.println(this.item);
}
public static void main(String[] args){
Subclass s = new Subclass();
s.test();
}
}
class Subclass extends Test {
int item = 1;
}
Run Code Online (Sandbox Code Playgroud)
得到:
0
0
Run Code Online (Sandbox Code Playgroud)
显然,从基类继承的Java方法(Test)也使用基类的成员变量.Python方法使用派生类(Subclass)的成员变量.
问题:有没有办法在Java中实现相同或至少类似的行为?
我试图在Java servlet中读取自己的MANIFEST.MF资源.我的情况:我在EAR中有一个WAR(带有我想要阅读的清单).EAR中还有其他几个WAR和JAR.类路径真的很长.
我尝试了Web中的几种方法,包括StackOverflow.
我可以使用读取所有MANIFEST.MF文件
this.getClass().getClassLoader().getResources("META-INF/MANIFEST.MF");
Run Code Online (Sandbox Code Playgroud)
并遍历它们.但是,我不知道哪一个是我的 - 我甚至不知道Implementation-Title,因为这是由构建管道生成的.(我可以通过构建管道的知识来猜测,因此我知道正确的清单就在那里.但是,我无法猜测生产代码.)
当然,
this.getClass().getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF");
Run Code Online (Sandbox Code Playgroud)
从类路径上的其他jar返回一个完全错误的清单.
我也试过了
this.getServletContext().getResourceAsStream("META-INF/MANIFEST.MF");
Run Code Online (Sandbox Code Playgroud)
但它返回null.
如何访问属于包含当前运行的servlet的WAR的MANIFEST.MF文件?
你能解释一下这个吗?
在Firefox中运行:http: //jsfiddle.net/eMa8y/24/
HTML:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>
<body>
<form>
<input type="text" placeholder="input" required />
<input type="text" placeholder="input" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
CSS:
input {
color:black;
}
[required] {
color:red;
}
Run Code Online (Sandbox Code Playgroud)
脚本:
$(document).ready(function () {
setTimeout(function () {
$("input").val("");
}, 3000);
});
Run Code Online (Sandbox Code Playgroud)
等待三秒钟,输入变为红色边框.为什么?这是Firefox的错误吗?
请注意,我使用的是Firefox 18.0.2.
谢谢.
java ×3
border ×1
css ×1
field ×1
html ×1
inheritance ×1
input ×1
manifest.mf ×1
overriding ×1
python ×1
required ×1
servlets ×1
super ×1
war ×1