java学习笔记(雍俊海)
2016-02-23 21:44
344 查看
一、类
当父类有私有的方法和属性,子类是继承不到的,所以子类不能访问父类的私有方法和属性。
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.决不能在不相关的任何类之间执行类的赋值或者类型转换。即类的强制转换仅限于有继承关系的俩个类的对象之间。
当父类有私有的方法和属性,子类是继承不到的,所以子类不能访问父类的私有方法和属性。
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.决不能在不相关的任何类之间执行类的赋值或者类型转换。即类的强制转换仅限于有继承关系的俩个类的对象之间。
相关文章推荐
- Java开发中的23种设计模式详解
- 最好的8个Java RESTful框架
- 【JAVA】18、二维数组
- java设计模式之观察者模式
- Eclipse全键盘编码攻略之一——入门
- 用Java实现的简易聊天系统(J2SE初学者练手项目)
- 上机题目(高级)- 电子词典(Java)
- Java设计模式菜鸟系列(七)命令模式建模与实现
- Java的局部变量没有系统默认初始值
- JAVA中的泛型
- windows7+eclipse+hadoop2.5.2环境配置
- 解决springmvc中文件下载功能中使用javax.servlet.ServletOutputStream out = response.getOutputStream();后运行出异常但结果正确的问题
- Spring环境下的 junit 集成测试3
- maven管理Java web项目WEB-INF/lib中jar包不能被引入的问题解决
- java学习日记——this关键字
- 深入理解Java的接口和抽象类
- kettel could not create java virtual machine
- 76_81java
- Java核心技术(第8版)学习笔记_继承(2)_反射
- 配置springmvc在其他类中(spring容器外)获取注入bean