Java 基础入门 | 第八章 继承、封装、多态

简介: 封装封装的概念把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象进行操作,对不可信的类或者对象隐藏,这样的过程叫做封装。封装的分类对属性的封装将属性设置为private(私有),限制其只能

封装

封装的概念

把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象进行操作,对不可信的类或者对象隐藏,这样的过程叫做封装。

封装的分类

对属性的封装

将属性设置为private(私有),限制其只能在类的内部使用

对方法的封装

对于方法的封装,将外部可以访问方法设置为public,将外部不能访问的方法设置为private

代码示例

//将属性和方法进行封装
public class Encapsulation {
    //成员变量设置为私有,达到属性封装的目的
    private String name;
    //为私有属性获取提供getter方法,用于获取属性值
    public String getName() {
        return name;
    }
    //为私有属性获取提供setter方法,用于给属性赋值
    public void setName(String name) {
        this.name = name;
    }
    //将成员方法设置为私有,达到封装的目的
    private void eat(){
        System.out.println("我是一名程序员,哈哈!!!");
    }
}

image.gif

继承

什么是继承

一个新类可以从现有的类派生,这样的过程叫做继承。

那么在继承的过程中,新类被称为子类,现有的类被称为父类,子类将会继承父类的属性和行为。

image.gif编辑 继承的语法

[修饰符] class 子类类名 extends 父类类名 {类体部分}

 

代码示例

创建一个动物类(Animal)

public class Animal {
    private int age;
    private String sex;
    private void eat(){
        System.out.println("吃饭!!!");
    }
    private void sleep(){
        System.out.println("睡觉!!!");
    }
}

image.gif

创建一个狗类(Dog),继承动物类(Animal)的属性和方法

public class Dog extends Animal{
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.setAge(3);
        dog.setSex("公");
        System.out.println("狗狗今年"+dog.getAge()+"岁");
        System.out.println("狗狗性别是"+dog.getSex()+"狗");
        dog.eat();
        dog.sleep();
    }
}

image.gif

Dog类继承了Animal类,Dog类可以称为AniMal的子类,Animal类可以成为Dog里的父类。

子类的扩展

子类除了可以拥有父类非私有的属性和方法外,也可以扩展自己的属性和方法

代码示例

public class Dog extends Animal{
    private String name;
    public void  shout(){
        System.out.println("汪汪汪汪!!!");
    }
    public static void main(String[] args) {
        Dog dog=new Dog();
        //private修饰变量和方法的可以直接在内部调用
        dog.name="旺财";
        System.out.println(dog.name);
        dog.shout();
    }
}

image.gif

    • Java中的继承是单继承,也就是一个类只能有一个父类。
    • 如果一个类没有显式的继承某一个类,那么它有一个默认的父类是java.lang.Object类
    • Java继承了父类非私有的成员变量和成语方法,但是请注意:子类是无法继承父类的构造方法的

    方法的重写

    重写 override   overload

    子类从父类继承的某个实例方法无法满足子类的功能需要时,需要在子类中对该实例方法进行重新实现,这样的过程称为重写,也叫做覆写。

    方法重写的要求

    子类重写方法的访问修饰范围必须大于或者等于父类对应方法的访问修饰符范围

    除修饰符外,重写方法的其他部分必须和父类保持一致

    super关键字

    super代表的是父类对象

    super的使用方式

    super.属性名 用于在子类中调用父类被隐藏的同名实例变量

    代码示例

    public class SuperClass {
        int num=20;
        //static 修饰内部类 可以被外部访问
        static class SubClass extends SuperClass{
            int num=30;
            public void  speak(){
                System.out.println(super.num);
                System.out.println(num);
            }
        }
        public static void main(String[] args) {
            SubClass subClass=new SubClass();
            subClass.speak();
        }
    }

    image.gif

    super([参数列表]) 用于在子类的构造方法中调用父类的构造方法

    代码示例

    public class SuperClass {
        public SuperClass(){
            System.out.println("父SuperClass的无参构造器");
        }
        public void  speak(){
            System.out.println("我是父类!!!");
        }
        //static 修饰内部类 可以被外部访问
        static class SubClass extends SuperClass{
            int num=30;
            public SubClass(){
                super(); //可以不写,默认就有
                System.out.println("子SubClass的无参构造器");
            }
            public void  speak(){
                super.speak();
                System.out.println("我是子类!!!");
            }
        }
        public static void main(String[] args) {
            SubClass subClass=new SubClass();
            subClass.speak();
        }
    }

    image.gif

      • 每一个子类的构造方法在没有显示调用super()系统都会提供一个默认的super()
      • super() 书写在第一行
      • 可以在子类构造方法中显示调用super(),完成对特定父类构造方法的调用

      多态

      什么是多态

      多态顾名思义即为多种形态的意思

      Java中多态的含义

      发送消息给某个对象,让这个对象自行决定采用哪种行为响应这个消息

      子类对象的引用赋值给父类引用变量来实现动态的方法调用

      Java中形成多态的前提

        • 继承
        • 重写
        • 向上转型

        代码示例

        动物类

        public class Animal {
            public void eat(){
                System.out.println("吃饭!!!");
            }
        }

        image.gif

        狗类

        public class Dog extends Animal{
            //重写父类方法
            public void  eat(){
                System.out.println("吃骨头!!!");
            }
        }

        image.gif

        猫类

        public class Cat extends Animal{
            //重写父类方法
            public void  eat(){
                System.out.println("吃鱼!!!");
            }
        }

        image.gif

        多态测试类

        public class MixinsTest {
            //多态(多种声明对象形式)
            public static void main(String[] args) {
                Animal dog=new Dog();
                Animal cat=new Cat();
                dog.eat();
                cat.eat();
            }
        }

        image.gif

        输出结果

        image.gif编辑

        多态的作用

          • 提高代码的可重用性
          • 降低模块之间的耦合度
          相关文章
          |
          15天前
          |
          Java 开发者 微服务
          Spring Boot 入门:简化 Java Web 开发的强大工具
          Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
          35 6
          Spring Boot 入门:简化 Java Web 开发的强大工具
          |
          12天前
          |
          监控 架构师 Java
          Java虚拟机调优的艺术:从入门到精通####
          本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
          |
          22天前
          |
          Java
          在Java中,接口之间可以继承吗?
          接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
          65 1
          |
          1月前
          |
          监控 安全 Java
          Java中的多线程编程:从入门到实践####
          本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
          |
          1月前
          |
          Java 大数据 API
          14天Java基础学习——第1天:Java入门和环境搭建
          本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
          |
          1月前
          |
          存储 安全 Java
          🌟Java零基础-反序列化:从入门到精通
          【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
          77 5
          |
          1月前
          |
          安全 Java 调度
          Java中的多线程编程入门
          【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
          35 1
          |
          1月前
          |
          Java 数据处理 开发者
          Java多线程编程的艺术:从入门到精通####
          【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
          48 3
          |
          2月前
          |
          Java
          Java中的多线程编程:从入门到精通
          本文将带你深入了解Java中的多线程编程。我们将从基础概念开始,逐步深入探讨线程的创建、启动、同步和通信等关键知识点。通过阅读本文,你将能够掌握Java多线程编程的基本技能,为进一步学习和应用打下坚实的基础。
          |
          24天前
          |
          Java 程序员 数据库连接
          Java中的异常处理:从入门到精通
          在Java编程的海洋中,异常处理是一艘不可或缺的救生艇。它不仅保护你的代码免受错误数据的侵袭,还能确保用户体验的平稳航行。本文将带你领略异常处理的风浪,让你学会如何在Java中捕捉、处理和预防异常,从而成为一名真正的Java航海家。