黑马程序员----基础学习第六天

                                    ------- android培训java培训、期待与您交流! ----------

 

                          

面向对象2
    一,Java类的继承
   概念:继承
 (1)把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。
    这样的话,多个类就可以省略很多代码。这个关系就是继承。java中用extends关键字表示。
 (2)继承的体系结构
  A:多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。
  B:继承体系的学习和使用原则
   **学习顶层的内容。因为他是整个体系的共性内容。
   **创建子类使用。也就是使用底层的具体对象。
 (3)继承的特点:
  A:java中只能单继承,没有多继承。
  B:java可以有多重(层)继承。
 (4)继承的好处:
  继承的出现提高了代码的复用性。
  继承的出现让类与类之间产生了关系,提供了多态的前提。

       A继承B   class A extends B{ }
 
1.为什么要继承?
 
 通过继承可以使对对象的描述更加清晰,可以实现代码的复用,
 可以实现重写类中的变量或方法,可以实现在无源代码的情况下修改被继承的类。
 
2.Java的类如何实现继承?
 
 Java类的继承是单一的,也是完全继承的。通过关键词extends关键字来实现。
 被继承的类称为父类,继承父类的类称为子类。继承语法:public calss classname extends superclassname.
 因为Java类的继承是单一的,所以extends后面只能指定一个父类。而完全继承则是指“一个类继承了父类的所有成员变量和成员方法。
3.类继承中的隐藏/覆盖/重载是怎么样的?
 
    类的隐藏:隐藏发生在子类和父类之间,针对父类中成员变量和静态方法而言的。当子类中声明与父类中声明的成员变量名相同时,则实现了对父类成员变量的隐藏。
 
  类的覆盖:覆盖也是发生在子类和父类之间,是指在子类中声明一个与父类具有相同的方法名/输入参数列表/返回值/访问权限等的方法,除过方法体不同外。
              在子类中重新编写方法实现的功能。常被用于替换父类相同的方法,实现功能的更新。
    类的重载:可发生在父类与子类之间,也可发生在同一类中。是指在子类与父类之间或同一类中定义多个具有相同方法名/访问权限等的方法。
 
4.构造方法的重载.
 
 如果当类没有构造方法的时候,创建类对象时调用无任何操作的默认构造方法。当子类有自身的无形式列表的构造方法时,创建对象时,会先创建父类的对象,再创建子类的对象。

5. super()方法和类方法复写机制

 1) super()方法

       在上面的实例中, 实际上在子类Student的构造方法中隐含了一个super()的方法. 该方法表示调用父类(即超类)的构造方法. 需要注意的是,我们也可以使用super(参数类型 参数名, 参数类型 参数名, ...)这样的格式来调用父类重载后的含参构造方法. 下面的例子中用到了这种super方法.

2)   子类对父类方法的复写

      子类可以继承父类的方法,也可以复写父类的方法. 但复写父类的方法有一个基本的前提: 所复写的方法不能有比父类方法更严格的访问权限. (访问权限 public > default > private)

  
 6.   final关键字:
   1.final可以修饰类,方法,变量。
   2.final修饰的类不可以被继承。
   3.final修饰的方法不可以被覆盖。
   4.final修饰的变量是一个常量。只能被赋值一次。
   5.内部类只能访问被final修饰的局部变量。

二.多态。
   概念:多态指的是父类型的引用可以指向子类的对象。(苹果是水果,足球是球)

     Parent p = new Child();
       p.execute();

 3.1、使用多态调用方法:
    当使用多态调用方法时,首先检查父类中是否有被调用的方法,如果没有则编译出错;如果有,再去调用子类的方法。

 3.2、多态中的两种类型转换:
    ① 向上类型转换(upcast):将子类型转换成父类型。对于向上类型转换,不需要显示指定:
      Parent p = new Child();

    ② 向下类型转换(downcast):将父类型转换为子类型。对于向下类型转换,必须要显示指定,使用强制类型转换:
      Parent p = new Child();
      Child child = (Child)p;

      以下的编译不会出错,运行时报错:
     Parent p = new Parent();
    Child child = (Child)p;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值