java学习Day10

构造器

  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的,并且构造器有以下两个特点:

    • 必须和类的名字相同
    • 必须没有返回值,也不能写void
  • 作用

    • 初始化对象的值

    • 在使用new关键字的时候,本质是在调用构造器

  • 无参构造

    • new对象没有参数时使用无参构造
    • 在定义了有参构造后还想使用无参构造的话,就必须将无参构造写出来,即显式定义
    • 基本结构
    public 类名 (){
        
    }
    
    • 测试举例
//一个项目应该只存在一个main方法
public class Application {

    public static void main(String[] args) {
        //new  实例化了一个对象
        Person person = new Person();
        System.out.println(person.name);
    }
}
public class Person {
    //一个类即使什么都不写,它也会存在一个方法
    //显示的定义构造器

    String name;
    //无参构造
    public Person(){//与类名相同,没有返回值
        this.name="gengsheng";//在未写此行时,右边会输出null
    }
}

输出结果为

在这里插入图片描述

  • 有参构造
    • new对象有参数时使用
    • 在定义了有参构造后还想使用无参构造的话,就必须将无参构造写出来,即显式定义
    • 结构
变量类型 对象本身的变量名;
public 类名 (参数类型 传递下来的参数名称){
    this.对象本身的变量名=传递下来的参数名称;
}
//一个项目应该只存在一个main方法
public class Application {

    public static void main(String[] args) {
        //new  实例化了一个对象
        Person person = new Person("gengsheng");
        System.out.println(person.name);
    }
}
public class Person {
    //一个类即使什么都不写,它也会存在一个方法
    //显式的定义构造器

    String name;
    //无参构造
    public Person(){//与类名相同,没有返回值
        this.name="gengsheng";//在未写此行时,右边会输出null
    }
    //有参构造:一旦定义了有参构造,无参就必须显式定义
    public Person(String nameA){
        this.name=nameA;
    }
}

输出结果为

在这里插入图片描述

方法重载。此时若传进来参数,则走有参构造,若没有传进来参数,则走无参构造

  • Alt+Insert 生成构造器的快捷键
    • 点击Constructor
      • 生成无参构造器:点击Select None
      • 生成有参构造器:选中对象,点击ok

面向对象三大特征

封装

  • 该露的露,该藏的藏

    • 程序设计要追求“高内聚,低耦合”
      • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
      • 低耦合:仅暴露少量的方法给外部使用
  • 数据的隐藏

    • 信息隐藏:通常应禁止直接访问一个对象中数据的实际表示,而应作为接口来访问
  • 属性私有,get,set

    • 属性私有:private,让别人不能直接引用

    • get:获得这个数据

    public 数据类型 get+对象(){
        return this.对象;
    }
    
    • set:给这个数据设置值
    public void set+对象(数据类型 变量名){
        this.对象=变量名;
    }
    
  • 实例

//类    private:私有,与public对应
public class Student {

    //属性私有
    private String name;//名字
    private int id;//学号
    private char sex;//性别
    private int age;//年龄

    //提供一些可以操作这个属性的方法(因为私有的属性意味着如果外面想new一个对象也无法去使用这些属性,因此要提供一些方法)
    //提供一些public的get,set方法

    //get:获得这个数据
    public String getName(){
        return this.name;
    }
    //set:给这个数据设置值
    public void setName(String name1){
        this.name=name1;
    }
    //Alt+Insert

    public int getId() {
        return id;
    }

    public char getSex() {
        return sex;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age<0||age>120){
            this.age=3;
        }else {
            this.age = age;
        }
    }
}
public static void main(String[] args) {
    Student s1 = new Student();
    s1.setName("更生");
    System.out.println(s1.getName());

    s1.setAge(999);//不合法的,通过封装即可保证系统安全性
    System.out.println(s1.getAge());

    System.out.println("====================================");

    Student s2 = new Student();
    s2.setName("曹和宇");
    System.out.println(s2.getName());

    s2.setAge(35);
    System.out.println(s2.getAge());
}

/*封装的意义:
1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.增加系统的可维护性
 */

输出结果为

在这里插入图片描述

  • 快捷键Alt+Insert
  • 封装的意义
    1. 提高程序的安全性,保护数据
    2. 隐藏代码的实现细节
    3. 统一接口
    4. 增加系统的可维护性

继承

  • 本质是对某一批类的抽象,从而实现对现实世界更好的建模

  • extends:“扩展”。子类是父类的扩展

  • Java中只有单继承,没有多继承。(一个儿子只能有一个父亲,而一个父亲可以有多个儿子)

  • 继承是类和类之间的一种关系

    • 类和类之间的关系还有依赖,组合,聚合等
    • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示
    • 子类和父类之间,从意义上来讲具有“is a”的关系
  • 在Java中,所有的类都默认直接或间接继承object类

  • 实例

//person  人:父类
public class Person {

    private int money=10_0000_0000;//修饰符是public才能继承,是private则不能继承,一般属性是私有的

    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }

    public void say(){
        System.out.println("说了一句话");
    }
}
//学生 is 人:派生类/子类
public class Student extends Person{
    //Ctrl+H
    public static void main(String[] args) {
        Student student = new Student();

        student.say();
        student.setMoney(23585);
        System.out.println(student.getMoney());
    }
}

Ctrl+H可以查看继承关系

输出结果为
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值