IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java三大特征——封装、继承、多态(上) -> 正文阅读

[Java知识库]Java三大特征——封装、继承、多态(上)

封装和继承

封装

什么叫做封装

  1. 将类中的一些内容保护起来
  2. 将类中的内容该暴露的暴露,该隐藏钢的隐藏

封装的目的

  1. 增加数据的安全性,简化我们的编程,使使用者不需要了解具体实现的细节

为什么我们需要封装

// @Author 人类
public class Person {
    //    姓名
    public String name;
    //    年龄
    public int age;

    public void sayHello() {
        System.out.println("大家好,我叫" + name + "我今年" + age + "岁了");
    }
}
// @Author 测试类
public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        person.name="张三";
        person.age=10000;
        person.sayHello();
    }
}

通过分析,我们发现,在设置年龄的时候我们无法通过判断去设置年龄的大小来确定我们设置的量是否正确。我们想要去改变这样的情况,就必须通过借助封装来实现。

如何实现封装

  1. 给属性设置权限修饰符 → private

    // @Author 人类
    public class Person {
        //    姓名
        private String name;
        //    年龄
        private int age;
    
        public void sayHello() {
            System.out.println("大家好,我叫" + name + "我今年" + age + "岁了");
        }
    }
    // @Author 测试类
    public class Test {
        public static void main(String[] args) {
            Person person = new Person();
            person.name="张三";
            person.age=10000;
            person.sayHello();
        }
    }
    

    当我们给属性设置完private修饰符之后,此属性便成为了私有化属性,外界无法直接访问(代码在编辑器中会报错);此时我们需要在Person类中添加getter/setter方法去操作私有化属性

  2. 添加getter/setter方法

    使用快捷键 alt+insert

  3. 在getter/setter方法中加入存取控制语句

    public class Person {
        //    姓名
        private String name;
        //    年龄
        private int age;
    
        /**
         * @return 获取 name
         */
        public String getName() {
            return name;
        }
    
        /**
         * 设置 name
         *
         * @param name
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * @return 获取 age
         */
        public int getAge() {
            return age;
        }
    
        /**
         * 设置 age
         *
         * @param age
         */
        public void setAge(int age) {
            if (age >= 120 || age <= 0) {
                System.out.println("您输入的年龄有误,请重新输入");
            } else {
                this.age = age;
            }
        }
    
        public void sayHello() {
            System.out.println("大家好,我叫" + name + "我今年" + age + "岁了");
        }
    }
    

    此时如果年龄不符合要求在这里不会再对age进行赋值

封装的内存图

在这里插入图片描述

继承

什么是继承

在生活中什么是继承

简单的来说就是你继承了父亲的财产

在Java中什么是继承

子类使用extends关键字继承父类的属性和方法

为什么需要继承

简化代码,提高代码的复用性

继承的关键字 →extends

语法

public class 子类 extends 父类 {}

继承的特点

  1. 子类完全继承父类的属性和方法
  2. 在Java中一个子类只能有一个父类 →也就是说只能单继承,子类只能继承一个父类
  3. 一个父类可以有多个子类 →也就是说Java中的类可以派生多个类

继承的优点

  1. 实现代码的复用性
  2. 子类中可以拥有父类没有的属性和方法,也就是说子类可以用于独有的属性和方法(注意:父类被子类继承的话父类无法用于独有的属性和方法,所以的属性和方法都会被继承)

继承的实现

// 父类
public class Person {
    private String name;
    private int age;

    /**
     * @return 获取 name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置 name
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return 获取 age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置 age
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }
    public void sayHello() {
        System.out.println("啦啦啦");
    }
}
// 子类
public class Teacher extends Person {

}

// 测试类
public class Test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.sayHello();
    }
}

方法重写

什么是方法重写

在子类中重写父类中拥有的方法

注解

@Override(重写)

@Override //重写
public void sayHello() {
    //super超类也就是父类的意思
    super.sayHello();
}

方法重写的实现

//父类
public class Person {
    private String name;
    private int age;

    /**
     * @return 获取 name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置 name
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return 获取 age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置 age
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public void sayHello() {
        System.out.println("我是Person类中的sayHello()方法,啦啦啦");
    }
}
//学生类
public class Student extends Person {
    
}
//教师类
public class Teacher extends Person {
    @Override //重写
    public void sayHello() {
        System.out.println("我是重写后的sayHello方法,啦啦啦");
    }
}

继承中的构造器

什么是构造器

  1. 构造器就是和类名相同但无返回类型的方法。用于当前或某一对象的实例化,并将当前或某一对象返回。要得到一个类的实例时,往往是要运行其构造函数的。

构造器的作用

用来创建对象

Person person = new Person()

在我们new的时候其实就是调用党构造器的时候,简单的来说我们通过调用构造器来创建实例化的对象

构造器的分类

  1. 有参构造器
public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
  1. 无参构造器
public Person() {
}

构造器的特点

  1. 即使不创建构造器,每一个类中也有一个默认的无参构造器
  2. 一个类中可以没有有参构造器,但无参构造器必须存在
  3. 有参构造器和无参构造器是可以同时存在的

继承者构造器的特点

  1. 当我们创建子类对象的时候,实际上是先调用了父类的构造器,再调用的子类构造器,也就是说我们创建子类的时候,父类已经存在了。

  2. // 父类
    public class Person {
        private String name;
        private int age;
    
        /**
         * @return 获取 name
         */
        public String getName() {
            return name;
        }
    
        /**
         * 设置 name
         *
         * @param name
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * @return 获取 age
         */
        public int getAge() {
            return age;
        }
    
        /**
         * 设置 age
         *
         * @param age
         */
        public void setAge(int age) {
            this.age = age;
        }
    
        public Person() {
            System.out.println("我是父类构造器");
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public void sayHello() {
            System.out.println("我是Person类中的sayHello()方法,啦啦啦");
        }
    }
    // 子类
    public class Teacher extends Person {
        public Teacher() {
            System.out.println("我是子类构造器");
        }
    
        @Override //重写
        public void sayHello() {
            System.out.println("我是重写后的sayHello方法,啦啦啦");
        }
    }
    // 测试类
    public class Test {
        public static void main(String[] args) {
            Teacher teacher = new Teacher();
            teacher.sayHello();
            Student student = new Student();
            student.sayHello();
        }
    }
    // 输出结果:
    我是父类构造器
    我是子类构造器
    我是重写后的sayHello方法,啦啦啦
    我是父类构造器
    我是Person类中的sayHello()方法,啦啦啦
    
    

构造器的调用

使用new关键字创建对象的时候调用构造器,根据参数判断调用哪个构造器

继承中的关键字

  1. this

    1. 和封装中的this关键字作用一样
    2. 代表的当前对象
      1. this是对象中的隐式属性(隐式属性是每个对象中都存在的)这个this代表的就是当前对象
      2. 在这里插入图片描述
  2. super

    1. super的含义
      1. 超级,在Java中,super的意思就是超类,简单的来说就是父类
      2. 他也是隐式属性,每一个对象中都有super这个隐式属性
      3. super执行的就是父类的地址

继承的内存图

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:04:45  更:2021-08-25 12:06:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:23:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码