小编use*_*790的帖子

Java:调用超类'构造函数,该构造函数调用覆盖方法,该方法设置子类的字段

我有这个演示代码:

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?看来这个领域根本没有设定.你能解释一下吗?

我该怎么做才能得到我期望的行为?提前致谢!

java overriding field super

9
推荐指数
1
解决办法
5217
查看次数

Java和Python中的继承之间的区别

执行的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中实现相同或至少类似的行为?

python java inheritance

7
推荐指数
1
解决办法
1212
查看次数

在Java servlet中读取自己的MANIFEST.MF

我试图在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文件?

java servlets manifest.mf war

5
推荐指数
1
解决办法
885
查看次数

当值为空并且颜色设置样式时,必需的输入字段获取边框

你能解释一下这个吗?

在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.

谢谢.

html css input border required

3
推荐指数
1
解决办法
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