java三大特性之继承与多态

简介: java三大特性之继承与多态

继承

学生类

    class Student{
      private String name ;
      private int age ;
      //提供对外公共访问方法
      setXXX()/getXXX()
      ...
    }


老师类

class Teacher{
      private String name ;
      private int age ;
      //提供对外公共访问方法
      setXXX()/getXXX()
      ...
    }



通过上述代码:

每一个类中都有姓名,年龄,提供对外的公共访问方法,随着开发过程,有很多很多类,每个类中都有这样的属性,开发过程

中代码量大,后期维护麻烦.

能不能将这多个类的共有的属性和共有的方法抽取出来,形成一个独立的类,让当前该类和其他类产生一种关系?

Java提供了一个 技术

继承 :extends synchronized(多线程中讲:同步)

格式:

class Fu{…}

class Zi extends Fu{…}


将刚才的学生类,老师类改进

//定义一个Person类:人类
  class Person{
    private String name;
  private int age; 
  public Person(){}
  public Person(String name,int age){
    this.name= name;
    this.age =age;
  }
  public void setName(String name){
    this.name = name;
  }
  public void setAge(int age){
    this.age = age;
  }
  public String getName(){
    return name;
  }
  public int getAge(){
    return age;
  }
  }
  class Student extends Person{
    public Student (){}
    public Student (String name,int age){
      super(name,age);
    }
  }
  class Teacher extends Person{
    public Teacher (){}
    public Teacher (String name,int age){
      super(name,age);
    }
  }

子类(存在无参/有参构造)继承父类,父类中有有参构造方法,但是没有提供无参构造方法,

会出现什么现象?如何解决?

编译不通过,

原因:因为子类中的无参或者有参构造默认访问父类无参构造方法…

解决方案:

1)手动给出父类的无参构造方法

2)通过super(传参);访问父类的有参构造方法

3)通过this(),调用本类中无参构造,在通过无参构造方法的super(传参);访问父类的有参


this(…)/super(…);语句都必须在构造方法中的第一条语句; 防止可能出现初始化过多…

public Student(){

//第一条语句

//super() ;

System.out.println("…") ;

}


多态的概念:

      一个事物在不同时刻的体现;
        多态的前提条件:
          1)必须有继承关系
              保证当前代码的维护性
          2)必须有方法重写
              因为每一个具体的事物,功能不一样,应该父类的进行扩展
          3)必须有父类引用指向子类对象
              父类名 对象名 = new 子类名() ; (向上转型)

多态的成员访问特点:

          成员变量:
            编译看左,运行看左
          成员方法:
            编译看左,运行看右(由于存在方法重写)
          静态的成员方法:(静态跟类有关系)
            编译看左,运行看左
          构造方法:
            父类创建对象是通过new 子类名() ;也是先对父类数据进行初始化


多态的好处:

          1)提高的代码维护性(继承保证)
          2)提高的扩展性(多态)  
              Animal a = new 任务具体动物类();


多态的弊端:

无法访问子类的特有功能.


解决方案:

            1)通过子类名 对象名  = new 子类名() ;  直接创建子类对象  
              能用,但是从内存角度考虑,不断在堆内存开辟空间,消耗内存资源...
            2)将父类的引用强制转换为子类引用(向下转型)
              前提条件:必须有父类引用(必须存在向上转型)
              子类名 对象名  = (子类名)父类引用;
              向下转型使用不当:会出现一个异常(ClassCastException:类转换异常)
                       运行时期异常;
            Animal a = new Cat() ;//猫是动物,内存是猫
            //还原成猫
            Cat c = (Cat)a;
            a = new Dog() ; //内存是狗
            //Cat c2 = (Cat)a; //编译可以通过,因为符合强转的语法 
                  运行时候发生异常:ClassCastException:类转换异常



目录
相关文章
|
13天前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
27天前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
28 9
Java——类与对象(继承和多态)
|
2天前
|
Java
为什么Java不支持多继承
本文讨论了Java不支持多继承的原因,包括避免菱形继承问题、简化编程语言和防止层次膨胀,同时提供了实现多继承效果的替代方案,如实现多接口、使用组合和继承加接口的方式。
6 0
为什么Java不支持多继承
|
14天前
|
安全 Java API
java安全特性
java安全特性
24 8
|
14天前
|
JavaScript 前端开发 Java
Java 8 新特性详解及应用示例
Java 8 新特性详解及应用示例
|
16天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的探索
【9月更文挑战第24天】本文将深入浅出地介绍Java 8中的重要新特性——Lambda表达式和Stream API,通过实例解析其语法、用法及背后的设计哲学。我们将一探究竟,看看这些新特性如何让Java代码变得更加简洁、易读且富有表现力,同时提升程序的性能和开发效率。
|
15天前
|
Java
Java 多态趣解
在一个阳光明媚的午后,森林中的动物们举办了一场别开生面的音乐会。它们组成了一支乐队,每种动物都有独特的演奏方式。通过多态的魅力,狗、猫和青蛙分别展示了“汪汪”、“喵喵”和“呱呱”的叫声,赢得了观众的阵阵掌声。熊指挥着整个演出,每次调用 `perform()` 方法都能根据不同的动物对象唤起对应的 `makeSound()` 方法,展现了 Java 多态性的强大功能,让整场音乐会既有趣又充满表现力。
|
15天前
|
Java
Java 的继承
在一个森林中,各种动物共存,如狗和猫。为了管理和组织这些动物,我们采用面向对象的方法设计模型。首先创建 `Animal` 超类,包含 `name` 和 `age` 属性及 `makeSound()` 和 `displayInfo()` 方法。接着,通过继承 `Animal` 创建子类 `Dog` 和 `Cat`,重写 `makeSound()` 方法以发出不同的声音。实例化这些子类并使用它们,展示了继承带来的代码重用、扩展性和多态性等优点。这种方式不仅简化了代码,还体现了现实世界的层次结构。
|
25天前
|
机器学习/深度学习 人工智能 安全
python和Java的区别以及特性
Python:适合快速开发、易于维护、学习成本低、灵活高效。如果你需要快速上手,写脚本、数据处理、做点机器学习,Python就是你的首选。 Java:适合大型项目、企业级应用,性能要求较高的场景。它类型安全、跨平台能力强,而且有丰富的生态,适合更复杂和规模化的开发。
30 3
|
3月前
|
搜索推荐 Java 编译器
【Java探索之旅】多态:重写、动静态绑定
【Java探索之旅】多态:重写、动静态绑定
25 0