JAVA初学OOP上

84 阅读3分钟

成员变量和行为变量

描述加代码

成员变量:

成员变量:
Dog类由我所定义的名字,种类和年龄组成
这些也就是狗的成员,成员变量组成了类(Dog),是类的重要组成部分
​
行为变量:
狗需要吃饭,睡觉,这些就是行为
​
类中的变量和方法统称为属性(共性特性)
​
public class Dog {
    public int age;
    //年龄
    public String name;
    //名字
    public String variety;
    //种类
    public void eat()
    {
        System.out.println("狗吃饭");
    }
    public void sleep()
    {
        System.out.println("狗睡觉了");
    }
​
​
}

使用这些类

package com.company;
​
public class Main {
​
    public static void main(String[] args) {
   // write your code here
        Dog  mydog= new Dog();
        //相当于注册一个帐号,在这里使用类
        mydog.name="kitty";
        mydog.age=2;
        mydog.variety="柯基";
        //赋值
        mydog.eat();
        mydog.sleep();
        //注销我的账户
        mydog=null;
        System.out.println(mydog.name);
​
    }
}

Dog mydog=new Dog(); 这里申请创建一个账户,

使用她 mydog=null; 销毁这个账户,使他指向空指针

image.png

重点

oop和封装

我们把成员变量做的安全,用private代替public同时提供了getter,setter这种方法叫作 oop 的封装

支付宝里面的余额你只由有充值才可以使用
如果设置成public,余额可以任意修改
这时候就得用private,私有变量去定义余额

image.png 当我设置blance为私有变量,如果使用PUBLIC那样的方式去使用会报错 不可以在main里像上图那样赋值,使用 那么该怎么使用捏??

getter and setter

 public void setBlance(int blance) {
        this.blance = blance;
    }
​
    public int getBlance() {
        return blance;
    }
}

我在Dog类定义get和set函数,用于访问private变量

然后在main函数里面这样使用他

mydog.setBlance(88888);
mydog.getBlance();
System.out.println("mydog.getBlance() = " + mydog.getBlance());

this.blance 指的又是啥捏?image-20221028150851973.png

如果每个私有变量都得这样写get set函数那就太麻烦了

所以我准备用别人写好的库来用 这里用的是lombok,这样导包就可以使用我们需要的函数了,getter setter

image-20221028152430860.png

这样把全部的变量都设置成私有时 这些定义就不可用了


这样使用就可

image-20221028152829836.png

如果想限止某些变量可以单写一个

//方法的重写
public void setAge(int age) {
    if(age>0){
      this.age=age;}
    else
    {
        this.age=0;
        System.out.println("输入的数值错误,请重新输入");
    }
}

toString

这样设置三个变量,如果我那样输出会得到啥? 三个值么?

mydog.setName("kennys");
mydog.setAge(11);
mydog.setVariety("东八区的美国狗");
 System.out.println("mydog = " + mydog);

好像是一串地址

image-20221028154208293.png 加入tostring(alt+insert)后

image-20221028154417842.png

构造方法

先定义,后赋值

image-20221028155628317.png

直接初始化(定义加赋值)

  //构造方法,不用加类型
    //默认创建的 无参数的,只要创建类,就会有无参构造函数(无参构造器)。
    //自己构造了方法也得写,不然报错  
public Dog(){}
//有参构造器
    public Dog(int age, String name, String variety, int blance) {
        this.age = age;
        this.name = name;
        this.variety = variety;
        this.blance = blance;  }
//
Dog zhangdog = new Dog(18,"kennys","柴犬",88);
System.out.println(zhangdog.getName());

image-20221028160322219

静态变量和静态方法

//dog类中
public static String house = "nang";
//main中,好像new的对象不能用,只能类用
System.out.println("Dog.house = " + Dog.house);

这样好像还是可以改变值,所以设置成private,就不可以额去改变值了.

那么还是得用getter setter来获取么? 区别是不可以用return this.house=house,因为我的函数好像没有传参w

private static String house = "nang";

public static String getHouse()
{
    return house;
}

static单例模式

public class earth {
    //单例设计模式
   private static earth instance=new earth();
//在类中定义,也没必要必须在Main在调用
    //只给一次new的机会,在类中定义对象
   private earth(){}

    public static earth getInstance()
    {
        return instance;
    }
    public void heelo()

    {
        System.out.println("heelpo");
    }
}
//main中
earth instance=earth.getInstance();
instance.heelo();