一、类
当父类有私有的方法和属性,子类是继承不到的,所以子类不能访问父类的私有方法和属性。
java 特性,private:类中只要限定为private的成员,只能被这个类本身访问
- 追问:
- private保护控制在类的级别上,而不是对象的级别这个我知道。我就想知道,子类到底是继承到父类的私有的了没?
- 回答:
-
没有继承,父类的任何私有方法和属性,子类是继承不到的。
-
- JAVA父类对象与子类对象-造型转换
-
描述1: Java中子类对象可以直接赋给父类对象,这个时候父类对象引用的就是子类对象的内存空间。如:
class A {
……
}
class B extends A {
……
}
则可以:
B b=new B();
A a=b;//正确
父类对象a引用了子类对象b指向的内存空间。
或者可以直接:A a=new B();//正确 -
描述2:Java中将父类对象赋给子类对象时,要进行强制类型转换
例如:
class People
{
int id;
String name;
People(){ -
}
People(int id,String name){
this.id=id;
this.name=name;
}
} -
class Student extends People{
float score;
Student(){ -
}
Student(int id,String name,float score){
this.id=id;
this.name=name;
this.score=score;
}
}
public class hello{
public static void main(String[] args){
Student stu=new Student(1,"jj",88);
People p=new People(3,"cc");
stu=(Student)p;//父类对象造型转换后赋给子类
System.out.println(stu.id);
}
}
上面的源程序可以同过编译,但在解释执行时会抛出class castException异常。
这是因为:可以执行类型转换“子=(子)父”,但需要运行时进行检查。如果父类变量引用的是正确的子类型(这句话的意思即为描述1中的内容:即父类对象要想强制转换后赋给子类对象,其本身引用的是子类型的内存空间),赋值将执行。如果父类变量引用的是不相关的子类型,将会生成class castException异常。 -
描述3:将描述2的源代码改为下面的形式,在运行时就不会抛出class castException异常了。
class People
{
int id;
String name;
People(){
}
People(int id,String name){
this.id=id;
this.name=name;
}
}
class Student extends People{
float score;
Student(){
}
Student(int id,String name,float score){
this.id=id;
this.name=name;
this.score=score;
}
}
public class hello {
public static void main(String[] args){
Student stu=new Student(1,"jj",88);
People p=new Student(3,"cc",99);
stu=(Student)p;
System.out.println(stu.id);
}
}
总结:
对类进行造型转换的应参考以下原则:
1.总是可以“父=子”赋值。此时不需要类型转换。
2.可以执行类型转换“子=(子)父”,但需要运行时进行检查。如果父类变量引用的是正确的子类型,赋值将执行。如果父类变量引用的是不相关的子类型,将会生成class castException异常。
即:如果父类的实例是在子类的实例上塑造的,“子=(子)父”时就不会抛出异常。
如:
A 是B的父类。
A a= new B(); //父类A的对象a是在子类B的对象上塑造的。
就可以:
B b= (B)a;
3.决不能在不相关的任何类之间执行类的赋值或者类型转换。即类的强制转换仅限于有继承关系的俩个类的对象之间。