现在的位置: 首页 > 综合 > 正文

第九天:继承

2018年05月16日 ⁄ 综合 ⁄ 共 3179字 ⁄ 字号 评论关闭

继承 用来表达概念上具体化延续的具体概念.
  子类是类型的具体化(特化), 父类是子类的泛化(概念抽象化)
 1 子类继承父类的属性和方法//在子类中, 可以直接调用父类的属性和方法,而且不用在子类中再写东西,
 //可以直接使用,如果你发现在子类中你想要这个方法不适合,那么你就可以重写这个方法。
//  第一、总结:子类的引用和对象可以直接调用父类的属性和方法,如果感觉父类的不是很适合,可以重写这个方法
//  当然也可以自己再重新定义一些方法和属性。
// 所以调用父类的属性和方法有四种方式:子类引用、子类对象、super()、直接写要使用的变量和方法。
// 特别是第四种,如果子类中有一样的属性和方法,会调用子类的,如果没有会向父类中去找,还没有,会继续向上找。
// 子类中调用父类的方法和属性的方式是用
//super.value; 
//super.method();
//super();//是在构造方法中调用父类的构造方法。调用的是无参的。
//super(2);//调用的是有参数的。
//父类中所有的属性和方法都会被继承过来,即使是私有的,但是它是有,但不可见。

 2 构造器不能继承!
 
 3 实例化子类,会递归分配所有父类的空间
 
 4 子类默认调用父类的无参数构造器
 //如果你在子类中没有写无参构造器,那么子类在new的时间,会自动调用父类的构造方法。
  
//且记:每次new的时间都是在调用构造方法,要有这个意识。

// 子类构造器一定调用父类的构造器!即使你不加,也会自动给你加上super();
 
关于继承中的构造器:

 1 子类递归调用父类构造器。
 //一个类X的父类是C,C的父类是B,B的父类是A,等。那么在使用X时间
 //它会先调用C->B->A->...这一系列构造器。
 //如果突然有一个父类中没有构造器呢?会出错 。所以、
 //编程建议:所有的类都提供无参数构造器!减少继承时候的麻烦。
 
 2 默认调用父类无参数构造器!
  //如果你在子类中没有写无参构造器,那么子类在new的时间,
  //且是无参数的new ,会自动调用父类的构造方法。
  //如果你在子类的构造方法中没有写上调用父类的构造方法,那么子类也会调用的,而且调用的是super();无参数的构造方法。
  
 3 如果父类没有无参数构造器,就必须在子类中明确指定调用
   父类的有参数构造器!
   
 4 使用super()调用父类构造器,必须写在子类构造器第一行
 
 5 编程建议:所有的类都提供无参数构造器!减少继承时候的
   麻烦, 同时这也是javabean规范的一部分。

 

http://hchaojie.iteye.com/blog/666203

http://hchaojie.iteye.com/blog/666203 
 
 
关于对象的实例化过程:(十分重要,所有的图都是在说这个问题)
 1 检查类是否加载,如果没有加载就加载这个类,
   要加载所有父类。
   懒惰式加载(按需加载):如果第一次用到就加载,
   只加载一次。
   通过CLASSPATH指定的路径寻找类文件,
   加载以后是一个对象,类型是Class。
   获得这个类对象:Student.class-> Class 实例
   
  //先从磁盘上加载.class文件,然后再在内存中分配空间。
  
 2 在内存堆中分配对象空间。递归(一层一层往上分配完以后,再分配子类的)分配所以父类属性空间。
   属性默认自动初始化。自动初始化为“0”值、null,false ,\u0000等默认值 。
   
 3 进行属性的赋值。
 //此时,会替代已经在内存中的有的默认变量,在内存中0变成7,false变成true等。
 
 4 递归调用父类构造器。(默认调用父类无参数构造器!)
 
 5 调用本类构造器。

访问控制
 1 public//任何地方均可见,任何地方均可调用。
 2 protected
 3 default// 很少使用,很少使用package作为访问控制的边界
 4 private //只能在类的内部可见,可以用。
 
 声明属性和方法尽可能私有。这样才能做到尽可能的封装。
 提供适当的属性访问方法,适当的开放属性的访问。
 
 不建议使用非公有类。就是说所有类都应该是公有的,并且
 一个源文件一个类。

/**FiledAccessDemo.java
 * 从这个程序中我们得到的方案是,属性不用绑定,我们通常是定义一个属性后
 * 生成它的get set方法,所以根据方法是动态绑定的,这样不会出问题。
 */

方法的覆盖

继承中的语法现象
 1 父类型可以引用子类型的实例,父类型的实现是多态的!
 
 2 子类可以覆盖父类的方法,修改父类的行为。
   方法覆盖:子类覆盖了父类“相同方法签名”的方法。
   方法的覆盖是由方法动态绑定实现的,就是Java虚拟机运行
   时候确定执行那个方法,java最终执行子类的方法。

byte b1 =1 ;
byte b2 = 2;
byte b =b1+b2;
//肯定会出现错误,因为byte类型
//它们相加后都会变成int类型。因为java底层中把byte,short类型均按照int类型

//局部变量必须初始化才能够使用,而成员变量如果不初始化,会有默认值的。十分重要。
//for(;;){}这个是死循环,后面的语句根本执行不到。下面的语句怎么写都会报错。
//char是无符号整型,16位与short一样。它的范围是0~65535.但是short是有符号的,范围是:-32768~32767
//默认右边是double类型,怎么可能大类型向小类型转呢,只能强制类型转换,所以要加f。
// float tt = 0.23;
// java标识符不能以数字开头,还有只能用特定的字符开头$ _ 
//如果switch不加break那么会一直向下执行。且记,不会中断。
预习以下知识.

关于JavaBean
 1 JavaBean 不是语法规范,是习惯性编程规范,用这个规范
   写的类使用方便。有时候JavaBean的类也称为:POJO
   Plan Old Java Object
  
 2 规范:
   a 必须有包.
   b 是一个Java类,具有无参数构造器。
   c 有用getXxx() 和 setXxx() 声明的Bean属性。
     如:getName() 和 setName(String n) 声明的
       Bean属性为:name, 与是否有实例变量name无关.
       boolean类型的get方法可以有两种形式:
         getMarried() 或者 isMarried()
   d 必须实现序列化接口(在学习IO的时候具体学习。)
   e JDK提供的类几乎都符合JavaBean规范。
     如:String
   
 3 JavaBean 最大的好处:“使用方便”

引用类型转换(是引用变量的类型的转换!)
 1 向下转型(自动类型转换),是小类型到大类型的转换
   如:
   Circle c = new Circle(1,2,3);
   Shape s = c;//表示圆一定是图形
 2 向上造型(强制类型转换),是大类型到小类型。
   如:
   Shape s = new Circle(1,2,3);
   Cirlcle c = (Circle)s; //当s实际引用圆时候,能够转换成功
   s = new Rectangle(1,1,2,2);
   Circle c2 = (Circle) s;//出现类型转换异常,因为
   // s引用的是Rectangle 不是圆实例。
 3 instanceof 运算符,用来检查引用对象的类型。
   经常与“引用类型强制转换”配合,实现安全的类型转换,
   避免类型转换异常。
   
static 修饰词(关键字),都是用来修饰类的成员的。
 1 静态修饰的成员变量,是属于类级别的变量,是在类的加载
 期间分配的,所有类和类的实例共享的一个变量,相当于全局
 变量。一般使用类名访问静态属性:
  Koo.x = 3;
    

抱歉!评论已关闭.