Java面向对象的特点之:继承

简介: Java面向对象的特点之:继承

对于继承,当大家看到这个词语的时候,在现实生活中,想必也会自然而然的想到了:继承家产??那么,在Java的面向对象的时候,也存在这样的思想!!


下面笔者来带领大家走进:继承!!


class Dog {
    public String name ;
    public  int age ;
    public void eat() {
        System.out.println(name +" 正在吃狗粮!");
    }
    //添加特有的方法
    public void wangwang() {
        System.out.println(name+"正在汪汪叫!");
    }
}
class Cat {
    public String name ;
    public  int age ;
    public void eat() {
        System.out.println(name +" 正在吃mao粮!");
    }
    //添加特有的方法
    public void miaomiao() {
        System.out.println(name+" 正在喵喵叫,惹人爱!(づ ̄3 ̄)づ╭❤~");
    }
}


在上述的代码中,Dog 与Cat这两个类之间有共用的成员变量,成员方法,也有特有的成员方法!!


0a2653c851af460fa595bd959398a8f1.png


对于上述的共有的成员属性,在上述代码中,仅仅定义了两个类,但是当定义多个类,都含有共有的成员属性,那么写起来,不得麻烦死??因此,我们可以将共有的属性抽取出来,放到一个类当中,当要使用的时候,就可以去哪儿拿就可以了!!


对上述代码进行简单更改:


class Dog {
    public String name ;
    public  int age ;
    public void eat() {
        System.out.println(name +" 正在吃狗粮!");
    }
    //添加特有的方法
    public void wangwang() {
        System.out.println(name+"正在汪汪叫!");
    }
}
class Cat {
    public String name ;
    public  int age ;
    public void eat() {
        System.out.println(name +" 正在吃mao粮!");
    }
    //添加特有的方法
    public void miaomiao() {
        System.out.println(name+" 正在喵喵叫,惹人爱!(づ ̄3 ̄)づ╭❤~");
    }
}


在上述代码中:


2d65d23f6d4748949b924e4057485923.png


在上述的代码中,就用了继承的思想!!


继承的最大意义:是对代码的重复利用!!(is a)的关系!!extands 是继承的关键字!!


class Dog extends Animal 所代表的意义是:  Dog is  a Animal


继承的概念:

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性 的基础上进行扩展,增加新功能,这样产生新的类,称派生类(子类)。继承呈现了面向对象程序设计的层次结构, 体现了 由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。


继承的简单语法:


修饰符(可写可不写)  class 子类名称  extends 父类名称 {

 …………


…………


}


注意:


子类会将父类中的成员变量或者成员方法继承到子类中了

子类继承父类之后,必须要新添加(也可以不添加)自己特有的成员,体现出与基类的不同,否则就没有必要继承了

Java中只能继承一个父类,并不支持多继承!

子类也可以当父类

父类成员的访问!!

1.子类和父类不存在同名的成员变量(比较简单,容易理解)


2.子类和父类成员变量同名!


如果子类与父类有同名的成员变量,则优先访问子类自己的!!


class Base {  //父类
    public int a ;
    public int b ;
    public int c ;  //默认成员变量,c ---->0
}
class Derived extends Base {
    public int c = 9 ;
    public void func() {
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}
public class test {
    public static void main(String[] args) {
        Derived derived = new Derived();
        derived.func();
    }
}

对于上述的代码,父类和子类有着相同的成员变量,那么,请看一下代码的运行结果:


6de278e6d6694ce5bb08e7e842b7e74b.png


拓展一下:当我们在类中有一下代码的时候:


public class Base {
        int a;
        int b;
        int c;
    }
    public class Derived extends Base {
        int a;
        char b;
    }

并且给其赋值:


public void method(){
        a=100;
        b=110;
        c=120;
    }

通过上述代码,思考一下:a ,b, c 的值分别为多少??


12c3b7f3f8814309a195c64f051d4445.png


在子类方法中通过子类对象访问成员时:


如果访问的成员变量子类中有,那么就先访问子类自己的成员变量

如果访问的成员变量子类中没有,那么则访问父类继承下来的,如果父类中没有定义,那么编译报错!

如果访问的成员变量与父类的成员变量同名,则优先访问子类自己的成员变量!

综上所述:成员变量的访问遵循就近原则,子类自己有,则先访问子类自己的,如果子类没有,那么像父类中查找!


在上述代码中,如果,就想要访问父类的成员c ,那么可以使用:super.c


 System.out.println(super.c);

对于super关键字 :可以用来在子类方法中访问父类的成员!!


super关键字的使用:


super. date :在子类当中访问父类的成员变量

super. func() :在子类当中访问父类的成员方法

对于super关键字的使用时注意事项:


只能在非静态方法中使用

在子类方法中,访问父类的成员变量和方法

子类中访问父类的成员方法!!

成员方法名字不同 (简单)

成员方法名字相同,跟父类成员的访问类似,可以用super来访问

说明:


通过子类对象访问父类与子类中不同名的方法时,优先在子类中找,找到则访问,找不到,则编译报错!

通过派生类(子类)对象访问父类和子类同名方法时,如果父类和子类同, 方法的参数列表不同(重载),根据调用方法传递的参数选择合适的方法访问,如果没有,则报错!


相关文章
|
17天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
12 2
|
22天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
16 3
|
22天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
30 2
|
22天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
28 2
|
22天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
28 1
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
1月前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
34 2
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
21 5
|
1月前
|
Java
java继承和多态详解
java继承和多态详解
42 5
|
1月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
23 3