Java类的成员变量调用问题

2018-03-17  本文已影响0人  lcwcloud

Java作为一种面向对象语言,我们在编写java代码就会显示出面向对象的特征(继承,封装,多态)。

这里我想说一个问题:

下面先简单写两个类:

// 父类

public class TestFather {

        private String str = "testFather";

        public void testSetStr() {

            str = "b";

        }

        public void testGetStr() {

            System.out.println(str);

        }

}

// 子类

public class TestSon extends TestFather {

    private String str = "testSon";

    public void test() {

        System.out.println("hi");

    }

    public static void main(String[] args) {    

        TestSon ts = new TestSon();

        ts.testGetStr();

    }

}

当我们运行程序时:输出的是:testFather

调用的子类继承父类的方法,输出子类和父类都有的str变量值,结果输出的是父类定义的str变量。

Java父子类型强转

  在实际的程序编写中,经常需要强转类型,而强转类型容易引起异常,经常引起程序的不稳定。但也有一些可以强转的清况,下面简单些两个类。

父类:

public class TestFather {

    private String str = "a";

    public void testSetStr(){

        str = "b";    

    }

    public void testGetStr() {

        System.out.println(str);

    }

}

子类:

public class TestSon extends TestFather {

    public void test() {

        System.out.println("hi");

    }

public static void main(String[] args) {

// 可以强转的情况

// 第一种,子类强转为父类

TestSon ts = new TestSon();

((TestFather)ts).testGetStr();

// 第二种,虽然创建的变量类型是父类,但是实际指向的是子类对象

TestFather ts = new TestSon();

        ((TestSon)ts).test();

// 不能强转的情况  有java.lang.ClassCastException

TestFather tf = new TestFather();

        ((TestSon)tf).testGetStr();

// java.lang.ClassCastException 文档中提供的一个抛出异常例子

// 文档讲的是:当我们写的代码中把一个对象转为一个子类,但是这个对象并不是这个这个子类的实例对象,就会抛出次异常

        Object a = new Integer(0);

        System.out.println((String)a);

    }

}

强转是要谨慎一些。

上一篇下一篇

猜你喜欢

热点阅读