JAVA面向对象基础2

二、面向对象基础

2.1 封装

1.变量私有化,private

2.生成get 、set方法    快捷键alt +insert

class Animal {
public int legs;
public void eat(){
System.out.println("Eating");
}
public void move(){
System.out.println("Moving.");
}
}
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
xb.legs = 4; //问题:xb.legs = -1000,解决方式将legs属性封装起来,防止乱用
System.out.println(xb.legs);
xb.eat();
xb.move();
}
}
//  未封装 ,输入什么什么都可以打印,这个例子的意思是动物的腿,所以说不可以输入负数,所以此处就不合理!

封装后:

class Animal {
private int legs;// 将属性legs定义为private,只能被Animal类内部访问
public void setLegs(int i) { // 在这里定义方法 eat() 和 move()
if (i != 0 && i != 2 && i != 4) {
System.out.println("Wrong number of legs!");
return;
}
legs = i;
}
public int getLegs() {
return legs;
}
}
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
xb.setLegs(4); // xb.setLegs(-1000);
//xb.legs = -1000; // 非法
System.out.println(xb.getLegs());
}
}

//get set方法封装后对输入的腿数做了一个限制,输入不合理的腿数便会输出错误的腿数。

2.2构造函数(相等于方法)

1.它具有与类相同的名称

2.不声明返回值类型

3.不能被static final synchronized abstract native修饰,不能有return返回值

作用:创建对象,给对象进行初始化!

如同我们规定每个人一出生就必须先洗澡,我们就可以在人的构造器中加入完成洗澡的代码,于是人一出生就会自动完成洗澡,程序就不用在人刚出生时告诉他们要洗澡了

public class Animal {
    private int legs;
// 构造器
    public Animal() {
      legs = 4;
    }
public void setLegs(int i) {
      legs = i;
}
public int getLegs() {
      return legs;
  }
}

根据参数不同分为两类:

隐式无参构造器(系统默认提供)

显式定义一个或者多个构造器(无参、有参)

java语言中每个类都至少有一个构造器

一旦显示定义了构造器,系统就不在提供默认构造器了

一个类可以创建多个重载的构造器

父类的构造器不可以被子类继承

案例:

public class Constructor {  // 构造函数

    private int age;
    private String name;

    public Constructor(int a, String n){
        name = n;
        age = a;
    }

    public Constructor(){
       age = 18;
    }

    public Constructir(String name){
       name = "Klay·Thompson"
    }

    //上边三个构造函数也组成了方法的重载

    public int getAge() {
        return age;
    }

    public void setAge(int a) {
//        this.age = age;
        if (a<0 || a>130){
            System.out.println("输入的数据无效!请重新输入");
        return;
        }
        age = a;
    }

    public String getName() {
        return name;
    }

    public void setName(String n, int i) {
//        this.name = name;
        name = n;
        age = i;
    }
}


TestConstructor:

public class TestConstructor {

    public static void main(String[] args) {
        Constructor p1 = new Constructor();

        p1.setAge(12);
        System.out.println("今年"+p1.getAge()+"了");

        Constructor p2 = new Constructor();
                p2.setName("斯蒂芬·库里" ,21);
 //在set方法里,定义了 String和int类型
        System.out.println("年龄为:"+p2.getAge());
        System.out.println("姓名:"+p2.getName());
    }
}

案例解析:

创建程序 , 在其中定义两个类: Person PersonTest 类。定义如下:用 setAge() 设置人的合法年龄
(0~130) ,用 getAge() 返回人的年龄。
前面定义的 Person 类中添加构造器,利用构造器设置所有人的 age 属性初始值都为 18
修改上题中类和构造器,增加 name 属性 , 使得每次创建 Person 对象的同时初始化对象的 age 属性值
name 属性值。

2.3 JavaBean

JavaBean是符合以下标准的Java类:

1.类是公共的

2.有一个无参的公共构造器

3.有属性并且有对应的get、set方法

public class JavaBean {
private String name; // 属性一般定义为private
private int age;
public JavaBean() {
}
public int getAge() {
return age;
}
public void setAge(int a) {
age = a;
}
public String getName() {
return name;
}
public void setName(String n){
return name;
}

//类是公共的 有一个无参的公共构造器 有属性和对应的get set方法 统称javabean

2.4 this关键词

在java中,this关键字比较难理解,它的作用和词义很接近。

1.在方法内部使用,及这个方法所属对象的引用

2.在构造器内部使用,表示该构造器正在初始化的对象。

this可以调用类的属性、方法和构造器

1.在方法内需要调用该方法的对象是就用this

2.可以用this来区分属性和局部变量。

小案例:
class Person { // 定义 Person
private String name ;
private int age ;
public Person ( String name , int age ){
this . name = name ;   //第一个name访问 属性name,等号后name访问构造函数name
this . age = age ;//第一个age访问 属性age,等号后age访问构造函数age

}

public void getInfo (){
System . out . println ( " 姓名: " + name ) ;
this . speak ();
}
public void speak (){
System . out . println ( 年龄: + this . age );
}
}

案例2:

public class This {
    String name;
    This(String name){
        this.name = name;
    }
    public void getInfo(){
        System.out.println("This类————》》》》"+this.name);
    }

    public boolean compare(This p){
        return (this.name = p.name).isEmpty();
    }
}

TestThis

public class TestThis {

    public static void main(String[] args) {
        This t1 = new This("张三");
        This t2 = new This("李四");

        t1.getInfo();
        t2.getInfo();

        boolean b = t1.compare(t2);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王_垒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值