学习面向对象的三大特征时遇到的问题

一、封装

1.String和StringBuilder的相互转换

public static void main(String[] args) {
        String s="hello";
        StringBuilder sb=new StringBuilder(s);

        System.out.println(sb);
        System.out.println(s);
    }

public static void main(String[] args) {
        String s="hello";
        StringBuilder sb=new StringBuilder();
        sb.append(s);

        System.out.println(sb);
        System.out.println(s);
    }

有什么区别?最后 s 这个对象还是存在,结果都一样。

答案是没区别。

2.写出程序的执行结果()

class Value{

  int i = 15;

}

class Test{

public static void main(String argv[]) {

Test t = new Test();

t.first();

}

 

public void first() {

int i = 5;

Value v = new Value();

v.i = 25;

second(v, i);

System.out.println(v.i);

}

 

public void second(Value v, int i) {

i = 0;

v.i = 20;

Value val = new Value();

v = val;

System.out.print(v.i + " " + i); //15  //0 

}

}

我的答案是15 0 15

正确答案是15 0 20

在second的方法中new了一个新对象val,val.i=15,原来的v指向了val,然后v.i也等于15了。但这个方法结束后,因为val是方法second中的局部对象,所以方法结束对象val也消失了,所以v.i 又指向了原来的20。

二、继承

1.方法重写与新写一个方法的区别

方法重写就覆盖了父类中的方法,调用这个方法时就会调用子类中的方法了,而不会调用父类中的那个了。学多态时会频繁使用。

而新写一个方法那就是一个新的方法。

2.为什么main方法前要加static,而之前学对象时,其他类中的成员方法不用加static?

这是因为static静态方法可以通过 类名.方法名 直接进行调用,不需要进行实例化。 假设不使用static,那么main()方法在调用时必须先对其实例化,而main()做为程序的主入口显然不可能先对其实例化,所以使用static修饰。

而与主方法同一类中的其他方法也要用static修饰是因为静态成员方法只能调用静态成员,而其他类的成员方法要新建一个对象才能调用,所以当时对于对象而言,成员方法就不用加static,这样对于不同的对象,成员方法就可以不同。加了static的话,所有对象的这个成员方法就不能改变了。

经验分享 程序员 微信小程序 职场和发展