zoukankan      html  css  js  c++  java
  • Java ------ 继承、方法覆盖、多态

    一、什么是继承

       面向对象的三大特性: 封装、 继承、多态;

              继承就是子类型将父类型的的属性继承到自己类中进行使用,通过继承的方式子类型可以使用父类型的属性和方法,并且,继承只能单重继承,无法多继承,但可以间接继承;

    的概念和作用

       继承其实不只是单单只有这些作用,其实它是一种前置条件,只有有了继承,才有后面的方法覆盖与多态;

       继承的注意事项: 子类无法继承父类的私有属性;

                                             父类型构造方法无法被继承;

    二、什么是方法覆盖

                所谓的方法覆盖 就是当父类型中的方法无法满足子类型的时候,通过不修改父类型方法,只在子类型中进行重写继承过来的方法,以达到满足程序要求;

     1 public class Test24 {
     2     public static void main(String[] args) {
     3 
     4         Dog d = new Dog();
     5         d.move();
     6         // output result: 狗在跑步
     7         // d.move() 的运行步骤是 d 引用调用 Dog 中的重写过后的方法
     8     }
     9 }
    10 
    11 class Dog extends DongWu{
    12 
    13     public void move(){
    14         System.out.println("狗在跑步");
    15     }
    16     // 当对父类型的方法进行重写时,其子类型中的重写方法,其 返回值类型,方法名,形参要全部一致相同,如果有不同的地方,将不构成方法的重载
    17     
    18 }
    19 
    20 class  DongWu{
    21 
    22     private void move(){
    23         System.out.println("DongWu 在移动!");
    24     }
    25 }
    View Code

               方法覆盖的注意事项: 1、进行覆盖的方法其修饰符级别不能低于父类型的修饰符级别;

                                                    2、构造方法无法被覆盖

                                                    3、静态方法不存在覆盖

                                                    4、覆盖只针对方法,不针对属性

                                                    5、抛出异常只能比父类型少,不能比父类型多

     三、什么是多态

                多态是一种通过继承的方式来达到程序解耦合的结构方式;

                在基本数据类型中,有学到过数据类型转换功能,其实在类与类之间也有类型转换,当然只有两个类或多个类有继承关系的情况下,才有类型转换,转换形式有两种:

                    —— 子类指向父类: 自动类型转换,且称为向上转型;

                    —— 父类指向子类: 强制类型转换,且称为向下转型;

     1 public class Test23 {
     2 
     3     public static void main(String[] args) {
     4         
     5         Animal a = new Tiger(); // 多态
     6         // 子类型指向父类型 ,自动类型转换,向上转型
     7         a.move();
     8         
     9         // Tiger i = (Tiger) a; 语法编译都正常,但是会出现运行异常:父类型有可能指向错误,解决方案
    10         
    11         if(a instanceof Tiger) {
    12             Tiger i = (Tiger) a; // 多态
    13             // 父类型指向子类型,强制类型转换,向下转型
    14             i.move();
    15         }
    16     }
    17 }
    18 
    19 class Animal{
    20 
    21     public void move() {
    22         
    23     }
    24 }
    25 
    26 class Tiger extends Animal{
    27     
    28     public void move() {
    29         System.out.println("老虎在散步");
    30     }
    31 }
    32 
    33 class Lion extends Animal{
    34 
    35     public void move() {
    36         System.out.println("老虎在跑步");
    37     }
    38 }
    View Code

             在该程序中出现了一个新的关键字 instanceof  -----------------> 它的作用是测试它左边的对象是否指向它右边的类的实例,返回boolean类型的数据;这样做的好处是判断两个类的指向,避免运行异常;

      四、为什么使用多态,多态的作用是什么

                  前面提到多态有解耦合的功能,将它运用在程序当中,可以是程序的耦合度更松散,使程序的可扩展性更强;

     1 public class Test22 {
     2 
     3     public static void main(String[] args) {
     4         
     5         Host zhangsan = new Host();
     6         
     7         Dog erHa = new Dog();
     8         
     9         zhangsan.feed(erHa);
    10     }
    11 
    12 }
    13 
    14 class Host{
    15     
    16     public void feed(Pet pet) {  
    17         pet.eat();
    18     }
    19 }
    20 
    21 class Pet{
    22     
    23     public void eat() {
    24         
    25     }
    26 }
    27 
    28 class Dog extends Pet{
    29     
    30     // 方法的继承与覆盖
    31     // 方法覆盖: 修饰符不大于,返回值不变,方法名不变,形参不变
    32     public void eat() {
    33     System.out.println("狗吃骨头");    
    34     }
    35 }
    36 
    37 class Cat extends Pet{
    38     
    39     // 方法的继承与覆盖
    40     public void eat() {
    41         System.out.println("猫吃鱼");    
    42         }
    43 }
    多态的功能性

                  多态的作用就是减少类与类之间的相关联,在类与类的继承过程中,提供一个抽象类,并将子类将抽象类作为父类 ,使它成为一个与原父类的接口, 达到剥离原父类的目的;在原父类在调用子类时,可以通过接口进行去调用,并可以达到子类与原父类不相关的目的,提高扩展性。

  • 相关阅读:
    IDEA设置显示行号和方法间的分隔符
    IDEA设置自动导包功能
    IDEA设置设置鼠标滚轮修改字体大小
    CA数字证书部署
    mysql数据库基础
    部署集群基础环境,MySQL-MMM架构部署,MySQL-MMM架构使用
    使用binlog日志, XtraBackup备份工具 ,MySQL AB复制
    实现MySQL读写分离,MySQL性能调优
    密码恢复及设置,用户授权及撤销,MySQL管理工具
    SQL数据导入/导出,操作表记录,查询及匹配条件
  • 原文地址:https://www.cnblogs.com/evething-begins-with-choice/p/12674626.html
Copyright © 2011-2022 走看看