8、面向对象编程(中级)

一、包

1、包的三大作用

(1)区分相同名字的类 (2)当类很多时,可以很好的管理类 (3)控制访问范围

2、包的基本语法

例:package com.hspedu;

说明:1、package 关键字,表示打包 2、com.hspedu 表示包名

3、包的本质

包的本质实际上就是创建不同的文件夹/目录来保存类文件

4、包的命名即规范

5、包的注意事项和细节

二、访问修饰符

1、基本介绍

注:必背

注:只有默认和public才能修饰类

这里的子类指的是不同包下的子类

三、封装encapsulation(重点!!!)

1、介绍

2、封装的实现步骤

练习题:

设计一个小程序,不能随便查看人的年龄、工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认年龄必须在0--120之间,年龄、工资不能直接查看,name的长度在2-6个字符之间

public class Encapsulation01 {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("jack");
        person.setAge(30);
        person.setSalary(30000);
        System.out.println(person.info());
        System.out.println(person.getSalary());
        System.out.println(person.getAge());
    }
}
/*
设计一个小程序,不能随便查看人的年龄、工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认
年龄必须在0--120之间,年龄、工资不能直接查看,name的长度在2-6个字符之间
 */
class Person {
    // 名字公开
    public String name;
    // 年龄不公开
    private int age;
    // 工资不公开
    private double salary;

    public void setName(String name) {
        //加入数据校验
        if (name.length() >= 2 && name.length() <= 6) {
            this.name = name;
        } else {
            System.out.println("名字长度不对");
        }
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        // 判断
        if (age >= 1 && age <= 120) {
            this.age = age;
        } else {
            System.out.println("年龄需要在0到120");
            //给一个默认年龄
            this.age = 18;
        }
    }
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }
    // 写一个方法返回属性信息
    public String info() {
        return "信息为 name=" + name + " age=" + age + " salary=" + salary;
    }
}

3、封装与构造器

//无参构造器
public Account() {
}
//有参构造器
public Account(String name, double balance, String password) {
    this.setName(name);
    this.setPassword(password);
    this.setBalance(balance);
}

四、继承(重点!!!)

1、继承基本介绍和示意图

2、继承的基本语法

3、继承的使用细节

(1)子类继承了所有的属性和方法,非私有的属性和方法可以在子类中直接访问,但是私有属性和方法不能在子类中直接访问,要通过父类公共的方法去访问

(2)子类必须调用父类的构造器,完成父类的初始化

(3)当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则编译不会通过。

(4)如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表)

(5)super 在使用时,必须放在构造器的第一行(super只能在构造器中使用)

(6)super() 和 this() 都只能放在构造器的第一行,因此这两个方法不能共存在一个构造器

(7)java 所有类都是Object类的子类,Object是所有类的父类

(8)父类构造器的调用不限于直接父类!将一直往上追溯直到Object类(顶级父类)

(9)子类最多只能继承一个父类(指直接继承),即java中是单继承机制(如果想让A类继承B类和C类,可以让A先继承B,再让B继承C)

(10)不能滥用继承,子类和父类之间必须满足is-a关系

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值