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

一个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后的成员变量名要首字母大写,且去掉“_”

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值