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);
}
}
强转是要谨慎一些。
网友评论