201711671109《Java程序设计》第六周总结(第5章)

本文深入探讨了面向对象编程中的子类与父类概念,包括子类的定义、继承特性、成员变量隐藏、方法重写、super关键字的使用、final关键字的作用、对象的上转型、多态性、抽象类和抽象方法的运用,以及面向抽象编程的原则。

教材内容学习

 

5.1子类与父类

1、子类

用过extends来定义一个类的子类

格式:

class 子类名 extends 父类名{

...

}

 

5.2子类的继承性

子类成员一部分是子类自己声明、定义的,另一部分是从它的父类继承的

1、子类和父类在同一包中的继承性

同一包内子类可以继承父类不是private的成员变量作为自己的成员变量

2、子类和父类不在同一包中的继承性

不在同一包只可以继承protect的和public成员变量

 

5.3子类与对象

1、子类对象的特点

当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都分配了内存空间,但只讲一部分,即子类继承的那部分成员变量作为分配给予子类对象的变量

 

5.4成员变量的隐藏和方法重写

1、成员变量的隐藏

所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),这种情况下,子类就会隐藏所继承的成员变量

特点:

①子类对象以及子类自己定义的方法操作与父类同名的成员变量是指子类重新声明的这个成员变量

②子类对象仍然可以调用从父类继承的方法操作被子类隐藏的成员变量

2、方法重写

①重写的语法规则

如果子类可以继承父类的某个方法,那么子类就有权利重写这个方法

重写的方法的名字,参数个数,参数类型和父类的方法要完全相同

②重写的目的

子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为

子类在查询可以继承的方法时,可以完全按照住的意图编写新的方法体

 

5.5super关键字

1、用super操作被隐藏的成员变量和方法

子类一旦隐藏了继承的成员变量,那么子类创建的对象就不仔拥有该变量,该变量将归关键字super所拥有

2、使用super调用父类的构造方法

由于子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法

 

5.6final关键字

1、final类

final类不能被继承,即不能有子类

2、final方法

如果用final修饰父类中的一个方法,那么这个方法不允许子类重写

3、常量

如果成员变量或局部变量被修饰为final,那它就是常量

 

5.7对象的上转型对象

对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能

特点:

①上转型变量不能操作子类新增的成员变量,不能调用子类新增的方法

上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法

 

5.8继承和多态

多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为

 

5.9abstract类和abstract方法

用关键字abstract修饰的类或方法称为abstract类或abstract方法(抽象类或抽象方法)

①abstract类中可以有abstract方法

②abstract类不能用new运算符创建对象

③abstract类的子类

如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法

④abstract类的对象作上转型对象

 

5.10面向抽象编程 

面向抽象编程的目的是为了应对用户需求的变化,将某个类中经常因需求变化而需要改动的代码从改类分离出去

面向抽象编程的核心是让类中每种可能的变化对应地交给抽象类的子类去负责

 

代码编写:

lass People {
    private int averHeight = 166;
    public int getAverHeight() {
       return averHeight;
    }
}
class ChinaPeople extends People {
     int height;
     public void setHeight(int h) {
          //height = h+averHeiht; // 非法,子类没有继承averHeiht
          height = h;
     }
     public int getHeight() {
        return height;
     }
}
public class Example5_2 {
  public static void main(String args[]) {
      ChinaPeople zhangSan = new ChinaPeople();
      System.out.println("子类对象未继承的averageHeight的值是:"+zhangSan.getAverHeight());
      zhangSan.setHeight(178);
      System.out.println("子类对象的实例变量height的值是:"+zhangSan.getHeight());
  }  
}
 

教材中遇到的问题

 

学习进度

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时 
第二周50/3001/68/38

类与子类

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值