当前位置: 首页 > article >正文

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【272-284】

文章目录

  • 272. 包基本介绍
    • 272.1 看一个应用场景
    • 272.2 包的三大作用
    • 272.3 包的基本语法
  • 273. 包原理
  • 274. 包快速入门
  • 275. 包命名
  • 276. 常用的包
  • 277. 包的使用细节
  • 278. 访问修饰符规则
    • 278.1 基本介绍
    • 278.2 四种访问修饰符的访问范围
  • 279. 访问修饰符细节
  • 280. 封装介绍
  • 281. 封装步骤
  • 282. 封装快速入门
  • 283. 封装与构造器
  • 284. 封装课堂练习

272. 包基本介绍

272.1 看一个应用场景

272.2 包的三大作用

272.3 包的基本语法

273. 包原理

274. 包快速入门

在不同的包下面创建不同的Dog类

275. 包命名

276. 常用的包

一个包下,包含很多的类,java 中常用的包有:

  1. java.lang.* //lang 包是基本包,默认引入,不需要再引入.
  2. java.util.* //util 包,系统提供的工具包, 工具类,使用 Scanner
  3. java.net.* //网络包,网络开发
  4. java.awt.* //是做 java 的界面开发,GUI

277. 包的使用细节


最好还是需要什么类就导入什么类

package com.Marisa;

import java.util.Arrays;

public class Import01 {
    public static void main(String[] args) {
        //使用系统提供的Arrays完成数组排序
        int[] arr = {-1, 20 ,2, 13, 3};
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
    }
}



278. 访问修饰符规则

278.1 基本介绍

java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

  1. 公开级别:用 public 修饰,对外公开
  2. 受保护级别:用 protected 修饰,对子类和同一个包中的类公开
  3. 默认级别:没有修饰符号,向同一个包的类公开.
  4. 私有级别:用 private 修饰,只有类本身可以访问,不对外公开.

278.2 四种访问修饰符的访问范围

279. 访问修饰符细节


在com.Marisa.modifier包下创建A类,B类和Test类,其中Test类中有主方法,在com.Marisa.pkg包下写一个Test类,这个Test类也有主方法,分别执行两个主方法

A类:

package com.Marisa.modifier;

public class A {
    //四个属性
    public int n1 = 100;
    protected int n2 = 200;
    int n3 = 300;
    private int n4 = 400;
    public void m1(){
        //在同一个类中,可以访问
        //public, protected, 默认, private
        //修饰的属性和方法
        System.out.println("n1=" + n1);
        System.out.println("n2=" + n2);
        System.out.println("n3=" + n3);
        System.out.println("n4=" + n4);
    }
}


B类:

package com.Marisa.modifier;

public class B {
    //同包
    public void say(){
        A a = new A();
        //在同一个包下可以访问public,protected和默认
        //但是不能访问private
        System.out.println("n1=" + a.n1);
        System.out.println("n2=" + a.n2);
        System.out.println("n3=" + a.n3);
    }

}

com.Marisa.modifier包下的Test类:

package com.Marisa.modifier;

public class Test {
    public static void main(String[] args) {
        A a = new A();
        a.m1();
    }
}

com.Marisa.pkg包下的Test类:

package com.Marisa.pkg;

import com.Marisa.modifier.A;

public class Test {
    public static void main(String[] args) {
        A a =new A();
        //在不同包下,可以访问public修饰的属性,
        //但是不能访问protected 默认 private
        System.out.println("a.n1= " + a.n1);
    }
}


执行com.Marisa.modifier包下的Test类主方法的结果为:
n1=100
n2=200
n3=300
n4=400
n1=100
n2=200
n3=300
执行com.Marisa.pkg包下的Test类的主方法为:
a.n1= 100

  • 只有默认和public可以修饰类,访问权限遵循上述规则

方法也遵循


280. 封装介绍

面向对象编程有三大特征:封装、继承和多态。

封装的理解和好处:

281. 封装步骤

282. 封装快速入门

package com.Marisa.encap;

public class Encapsulation01 {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("你是一个一个一个");
        person.setAge(114514);
        person.setSalary(114514);
        System.out.println(person.info());
    }

}
class Person{
    public String name;//名字,公开的
    private int age;// age 私有的
    private double salary;// 薪水,私有
    //自己写set get方法太慢,使用快捷键
    //然后根据要求完善代码
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age >=1 && age<=120){
            this.age = age;
        }else{
            System.out.println("你设置的年龄不对,年龄要在1-120,已设置默认24");
            this.age = 24;//给一个默认的24
        }
    }

    public double getSalary() {
        //可以增加权限判断
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public void setName(String name){
        //加入对数据的校验,相当于增加了业务逻辑
        if(name.length() >= 2 && name.length() <= 6){
            this.name = name;
        }else{
            System.out.println("名字的长度不对,需要(2-6)个字符,默认名字田所浩二");
            this.name = "田所浩二";
        }
    }
    public String getName(){
        return name;
    }
    //写一个方法,返回属性信息
    public String info(){
        return "信息为\nname=" + name + "\nage=" + age + "\nsalary=" +salary;
    }
}

运行结果:
名字的长度不对,需要(2-6)个字符,默认名字田所浩二
你设置的年龄不对,年龄要在1-120,已设置默认24
信息为
name=田所浩二
age=24
salary=114514.0

283. 封装与构造器

将刚才的代码加入构造器,将构造器与setXxx结合

package com.Marisa.encap;

public class Encapsulation01 {
    public static void main(String[] args) {
        Person person = new Person("你是一个一个一个", 114514, 114514);
        System.out.println(person.info());
    }

}
class Person{
    public String name;//名字,公开的
    private int age;// age 私有的
    private double salary;// 薪水,私有
    //自己写set get方法太慢,使用快捷键
    //然后根据要求完善代码
    public Person(){}
    //有3个属性的构造器
    public Person(String name, int age, double salary) {
//        this.name = name;
//        this.age = age;
//        this.salary = salary;
        //将set方法写在构造器中
        setName(name);
        setAge(age);
        setSalary(salary);
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age >=1 && age<=120){
            this.age = age;
        }else{
            System.out.println("你设置的年龄不对,年龄要在1-120,已设置默认24");
            this.age = 24;//给一个默认的24
        }
    }

    public double getSalary() {
        //可以增加权限判断
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public void setName(String name){
        //加入对数据的校验,相当于增加了业务逻辑
        if(name.length() >= 2 && name.length() <= 6){
            this.name = name;
        }else{
            System.out.println("名字的长度不对,需要(2-6)个字符,默认名字田所浩二");
            this.name = "田所浩二";
        }
    }
    public String getName(){
        return name;
    }
    //写一个方法,返回属性信息
    public String info(){
        return "信息为\nname=" + name + "\nage=" + age + "\nsalary=" +salary;
    }
}

运行结果:
名字的长度不对,需要(2-6)个字符,默认名字田所浩二
你设置的年龄不对,年龄要在1-120,已设置默认24
信息为
name=田所浩二
age=24
salary=114514.0

284. 封装课堂练习


Accoun.java:

package com.Marisa.encap;

public class Account {
    private String name;//姓名
    private double balance;//余额
    private String password;//密码

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if(name.length() >=2 && name.length() <=4){
            this.name = name;
        }else{
            System.out.println("名字输入不合法,长度为2,3,4,已设置默认名字田所浩二");
            this.name = "田所浩二";
        }
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        if(balance > 20){
            this.balance = balance;
        }else{
            System.out.println("余额必须超过20,已设置默认值0");
            this.balance = 0.0;
        }
    }

    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        if(password.length() == 6){
            this.password = password;
        }else{
            System.out.println("密码必须为6位,已设置默认密码:000000");
            this.password = "000000";
        }
    }
    //打印信息
    public String info(){
        //可以增加权限校验
        return "信息:\nname=" + name +"\nbalance=" + balance;
    }

    public Account(String name, double balance, String password) {
        setName(name);
        setBalance(balance);
        setPassword(password);
    }
}

AccountTest.java:

package com.Marisa.encap;

public class AccountTest {
    public static void main(String[] args) {
        Account account = new Account("你是一个一个", 1, "1145141919");
        System.out.println(account.info());
    }
}

运行结果:
名字输入不合法,长度为2,3,4,已设置默认名字田所浩二
余额必须超过20,已设置默认值0
密码必须为6位,已设置默认密码:000000
信息:
name=田所浩二
balance=0.0


http://www.kler.cn/news/337395.html

相关文章:

  • 冯诺依曼体系结构与操作系统简介
  • 回归任务学习笔记
  • 自动驾驶 车道检测实用算法
  • 系统架构设计师-论文题(2018年下半年)
  • 【学习资源】人在环路的机器学习
  • ruoyi-python 若依python版本部署及新增模块【问题解决】
  • Django 5 用后台admin 做一个简单 DIY 电脑组装报价系统
  • numpy random模块介绍
  • BUCK降压电路
  • 从底层结构开始学习FPGA(15)----时钟结构(通俗版)
  • Python | Leetcode Python题解之第461题汉明距离
  • 在 Kali Linux 中安装 Impacket
  • SpringBoot项目-Thymeleaf安装
  • 通信协议感悟
  • 玩机进阶教程-----高通芯片机型 无需借助其他工具 使用QPST备份 恢复全分区与全字库步骤详细解析
  • QSqlDatabase在多线程中的使用
  • 【Qt】控件概述(4)—— 输出类控件
  • Python安装库时使用国内源pip install -i
  • docker快速上手
  • 内网Debian\Ubuntu服务器安装dep包,基于apt-rdepends下载相关依赖