谈谈java继承与多态

简介: 1. 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用父类构造方法2. 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。3. 在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。4. super(...)只能在子类构造方法中出现一次,并且不能和this同时出现

目录


继承


1.为什么要继承


2.继承的概念


3.继承的语法


4.子类与父类访问


super的用法


多态


1.满足条件


2.体现


3.重写


3.向上转型


4.向下转型


继承

1.为什么要继承

我们的对象不止一个,但是ta们可能有相同的部分,为了将这些共性抽取,实现代码复用提出了继承的概念。


2.继承的概念

一个类继承另一个类,实现共性的抽取与实现代码复用。


3.继承的语法

修饰符 class子类 extends 父类 {
       //...
}

例如:我们有一个Animal类,让一个Dog类继承它,Dog中能使用父类的成员与方法

//Animal.java
public class Animal {
    String name;
    int age;
    public void eat(){
        System.out.println(name + "正在吃饭");
    }
    public void sleep(){
        System.out.println(name + "正在睡觉");
    }
}
//Animal.java
class Dog extends Animal {
    void bark(){
        System.out.println(name + "汪汪汪~~~");
    }
}
//TestExtend.java
public class TestExtend {
    public static void main(String[] args) {
    Dog dog = new Dog();
    // dog类中并没有定义任何成员变量,name和age属性肯定是从父类Animal中继承下来的
    System.out.println(dog.name);
    System.out.println(dog.age);
    // dog访问的eat()和sleep()方法也是从Animal中继承下来的
    dog.eat();
    dog.sleep();
    dog.bark();
    }
}


4.子类与父类访问

(1)当子类与父类有同名的成员变量时,在子类中访问这个变量时,优先访问子类自己的。


(2)要是访问与子类同名的父类中的成员变量时,需要用super(下面将super的用法)


(3)子类对象构造时,得先调用父类构造方法


注意:

1. 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用父类构造方法

2. 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。

3. 在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。

4. super(...)只能在子类构造方法中出现一次,并且不能和this同时出现

super的用法

 (1)   调用父类实例变量


(2)调用父类方法


(3)super()调用父类构造函数


 (4)   必须位于方法的第一行,不能与this()同时存在,this父类和子类都能访问,super只能访父类的


(5)只能在类的非静态方法中使用,用来访问非静态成员方法和字段


多态

1.满足条件

1. 必须在继承体系下


2. 子类必须要对父类中方法进行重写


3. 通过父类的引用调用重写的方法


2.体现

降低代码的圈复杂度。


在代码运行时,当传递不同类对象时,会调用对应类中的方法。


3.重写

(1)方法名相同(下面讲特例)


(2)参数列表相同


(3)返回值相同


注意:


1.被private,static,final 修饰的类不能被重写


2.访问修饰限定符子类中重写的方法必须比父类范围大


  private < 默认权限 < protected < public


3.方法名可以不同时,必须是父子类关系


4.构造方法不能被重写


3.向上转型

语法格式:父类类型 对象名 = new 子类类型


(1)直接赋值


(2)方法传参的方式


(3)返回值


4.向下转型

语法格式: 子类类型 对象名 = (子类类型)父类



目录
相关文章
|
28天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
19 3
|
28天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
37 2
|
28天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
30 2
|
28天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
34 1
|
1月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
22 4
|
1月前
|
Java 编译器 程序员
Java多态背后的秘密:动态绑定如何工作?
本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
41 4
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
1月前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
39 2
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
23 5
|
1月前
|
Java
java继承和多态详解
java继承和多态详解
43 5