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基础笔记_7_包_封装_继承_多态 -> 正文阅读

[Java知识库]Java基础笔记_7_包_封装_继承_多态

一个java包就是一组功能相似或相关的类

  • 包对于类,相当于文件夹对于文件的作用
  • 通过包可以限定类的访问权限
  • 通过包可以很容易对解决类重名的问题

二 封装

1 封装即隐藏功能的实现细节

  • 提高代码的安全性
  • 提高代码的复用性
  • “高内聚”:封装细节,便于修改内部代码,提高可维护性
  • “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作?

2 this关键词

this代表“当前对象”

this.属性名称
指的是访问本类中的成员变量,用来区分成员变量和局部变量(重名问题)

this的其它用法:http://c.biancheng.net/view/953.html

3 对成员变量进行读写封装

3.1 getter方法用于读取成员变量的内容。其书写格式如下

public 成员变量类型 get成员变量(){
????????return 成员变量名;
}?

注:get后的成员变量名要首字母大写,且去掉“_”?

?3.2?setter方法用于更改成员变量的内容。其书写格式如下

public void set成员变量(成员变量类型 成员变量名){
????????tihs.成员变量名 = 成员变量名;
}?

注:set后的成员变量名要首字母大写,且去掉“_”

public class Member {
    private String name;
    // 在idea中可以自动生成。路径是:Code - Generate - Getter and Setter
    
    // 可以获取name的内容
    public String getName() {
        return name;
    }

    // 可以更改name的内容
    public void setName(String name) {
        this.name = name;
    }
}

三 继承

1 继承就是子类继承父类的属性和行为

下图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有

图5-1 现实世界中的继承.png

2 示例

2.1 父类

// 创建类
public class People {
    // 静态变量只能在
    public static String feature;
    public String name;

    public void cry(){
        System.out.println(name + "伤心的时候会掉眼泪");
    }

    protected void act(){
        System.out.println(name + "两条腿走路");
    }

    private static void alive(){
        System.out.println("People大多数情况下能活几十岁");
    }

    public static void main(String[] args) {
        // 静态属性和方法在类实例化之前就存在,一般通过类名.属性、类名.方法名()来调用
        People.feature = "一脑两眼四肢";
        People.alive();

        People liSan = new People();
        liSan.name = "lisan";

        liSan.act();
        liSan.cry();

    }
}

2.2 子类

// 继承使用 extends
// extends 关键字前面是子类,后边是父类
// 子类会继承父类中被(default)/protected/public修饰的成员变量和方法
public class Infant extends People {
    // String类型的默认值是 null
    public String name_baby;

    public static void main(String[] args) {
        Infant infat = new Infant();
        // 直接继承了父类的name属性
        infat.name = "Baby";
        // 直接继承了父类的cry方法
        infat.cry();
        // 重写了父类的act方法
        infat.act();
        infat.shout();
    }

    // 重写了父类的act方法
    public void act(){
        System.out.println(name + "四条腿走路");
    }

    // 新写的shout方法
    public void shout(){
        System.out.println(name_baby + "大喊大叫");
    }
}

四 多态

1 多态:是同一个行为具有多个不同表现形式或形态的能力。

2 接口

Java中实现多态最重要的就是接口。多态就是同一个接口,使用不同的实例而执行不同操作。

有时必须从几个类中派生出一个子类,这个子类需要继承所有父类的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果

实现接口的语法

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

?

?在Java中,类的多继承是不合法,但接口允许多继承,其语法如下

public interface LuoZi extends Lv, Ma

继承只能继承一个类。但implements可以实现多个接口,用逗号分开就行

class A extends B implements C,D,E

接口的方法一般为空的, 必须重写才能使用

3 接口示例

任务:根据不同的区号返回不同语言的问候语

目录如下

3.1 接口文件

从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

package com.learn.test.sample.system;

public interface Language {
    public void voice();
}

?3.2 实现接口功能的类

package com.learn.test.sample.system;

public class Chinese implements Language{

    @Override
    public void voice() {
        System.out.println("你好");
    }
}
package com.learn.test.sample.system;

public class English implements Language{

    @Override
    public void voice() {
        System.out.println("hello");
    }
}

3.3 对外提供功能的类(将接口文件和实现接口功能的类进行结合)?

package com.learn.test.sample.system;

public class CustomerService {
    public Language contact(int areaCode){
        if (areaCode == 86){
            return new Chinese();
        }else{
            return new English();
        }
    }

//    public static void main(String[] args) {
//        Language language = new English();
//        language.voice();
//
//        CustomerService cs = new CustomerService();
//        Language languageTest = cs.contact(86);
//        languageTest.voice();
//    }
}

3.4 调用接口

package com.learn.test.sample;

import com.learn.test.sample.system.CustomerService;
import com.learn.test.sample.system.Language;

public class Customer {
    public static void main(String[] args) {
        CustomerService customerService = new CustomerService();
        // 等号前面是接口的名字,后边是接口对外提供功能的类
        Language language = customerService.contact(86);
        language.voice();
    }
}

@Override?标签的作用

  • 可以告诉读代码的人,这是对它父类方法的重写
  • idea编译器可以验证@Override下面的方法名称是否是父类中所有的

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:06:43  更:2021-08-09 10:07:34 
 
开发: 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年5日历 -2024/5/10 19:08:47-

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