Java基础笔记_7_包_封装_继承_多态

news/2024/7/3 12:28:32 标签: java, 多态, 封装, 继承

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

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

封装

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

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

2 this关键词

this代表“当前对象”

大部分时候,普通方法访问其他方法、成员变量时无须使用 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后的成员变量名要首字母大写,且去掉“_”

java">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 现实世界中的<a class=继承.png" src="https://img-blog.csdnimg.cn/img_convert/611efb082a7688bb93ffa45e3ce2dfdf.png" />

2 示例

2.1 父类

java">// 创建类
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 子类

java">// 继承使用 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不支持多重继承。有了接口,就可以得到多重继承的效果

实现接口的语法

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

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

java">public interface LuoZi extends Lv, Ma

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

java">class A extends B implements C,D,E

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

3 接口示例

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

目录如下

3.1 接口文件

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

java">package com.learn.test.sample.system;

public interface Language {
    public void voice();
}

 3.2 实现接口功能的类

java">package com.learn.test.sample.system;

public class Chinese implements Language{

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

public class English implements Language{

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

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

java">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 调用接口

java">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下面的方法名称是否是父类中所有的


http://www.niftyadmin.cn/n/975212.html

相关文章

基于第二次数独游戏,添加GUI界面

高级软件工程第三次作业&#xff1a;基于第二次数独游戏&#xff0c;添加GUI界面。GUI界面代码如下&#xff1a; 1 package firstGui;2 3 import java.awt.*;4 import java.awt.event.ActionEvent;5 import java.awt.event.ActionListener;6 import java.awt.event.ItemEvent;7…

OpenLDAP Master-Slave同步复制

1、实验环境说明用于做OpenLDAP同步的两台机器的IP分别为&#xff1a; 192.168.1.35&#xff08;Master&#xff09;&#xff0c; 192.168.1.36&#xff08;Slave&#xff09;操作系统&#xff1a; CentOS 6.5 x64 &#xff0c; 并且已经安装好 OpenLDAP &#xff0c;其管理员…

Hive 实战调优参数大全

-- 开启动态分区&#xff0c;写入数据时需要 set hive.optimize.sort.dynamic.partitiontrue; -- 默认值是strict&#xff0c;默认要求分区字段必须有一个是静态的分区值 set hive.exec.dynamic.partition.modenonstrict;-- 控制在同一个sql中的不同的job是否可以同时运行。默认…

php三种无限分类

无限分类&#xff0c;是指从一个最高分类开始&#xff0c;每个子分类都可以分出自己的若干个子分类&#xff0c;可以一直分下去&#xff0c;称为无限级分类&#xff1b; 下面是对省市县的无限极分类的列子。数据库如图&#xff1a; 代码示例如下&#xff1a; /*** Description:…

Canny效果

转载于:https://www.cnblogs.com/herd/p/9793567.html

word、excel、ppt转PDF文件

今天项目要求做个word、excel转pdf的功能&#xff0c;百般搜刮&#xff0c;测试&#xff0c;终于完成. 下面这个是word、excel、ppt转pdf功能&#xff0c;支持doc、docx、xls、xlsx、ppt、pptx转pdf 1、 准备工作&#xff1a;windows环境、maven项目&#xff0c;普通项目也可以…

Java基础笔记_9_常用类_String_StringBuilder

一 String类 1 创建String对象的方式 // 先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"张三" // 如果没有&#xff0c;则将"张三"存放进栈&#xff0c;并令str指向"张三" // 如果已经有"张三",则直接令str指…

win10下的linux一些问题

1.文件位置在&#xff1a; C:\Users\用户名\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs 2.将路径加到其中&#xff1a; echo "export PATH/home/用户名/anaconda2/bin:$PATH" >> .bashrc //发现之前安装&…