每日一学Java篇

这篇博客介绍了Java面向对象的封装性概念,通过实例展示了如何通过私有化属性和提供公共的getter/setter方法实现封装。同时,详细讲解了Java的四种权限修饰符(private、default、protected、public)及其应用场景,并提供了构造器的使用和构造器重载的示例。最后,通过练习加深了对属性赋值顺序和构造器的理解。
摘要由CSDN通过智能技术生成

今天继续学习Java面向对象的内容,一下素材均来自B站尚硅谷。

面向对象特征之一:封装和隐藏

一、问题的引入:

        当我们创建一个类的对象以后,我们可以通过”对象.属性“的方式,对对象的属性进行赋值。这里,赋值操作要受到属性数据类型和存储范围的制约。除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件。这个条件就不能在属性声明时体现,我们只能通过方法进行限制的条件的添加(比如:setLegs)。同时,我们需要避免用户再使用”对象.属性“的方式对属性进行赋值。则需要将属性声明为私有的(private)- - >此时,针对于属性就体现了封装性。

二、封装性的体现:

我们将类的属性xxx私有化(private)同时,提供公共的(public)方法来获取(getxxx)和设置(setxxx)此属性的值。

        拓展:封装性的体现:1.如上 2.不对外暴露的私有的方法 3.单例模式 . . .

public class AnimalTest {
    public static void main(String[] args){
        Animal a = new Animal();
        a.name = "大黄";
//        a.age = 1;
//        a.legs = 4;
//        a.show();

        a.setLegs(-6);
        a.show();
    }
}

class Animal{
    String name;
    private int age;
    private int legs;//腿的个数

    //对属性的设置
    public void setLegs(int l){
        if(l >= 0 && l % 2 == 0){
            legs = l;
        }else {
            legs =0;
        }
    }

    //对属性的获取
    public int getLegs(){
        return legs;
    }

    public void eat(){
        System.out.println("动物进食");
    }

    public void show(){
        System.out.println("name =" + name + "age = " + age + "legs" + legs);
    }

    //提供关于属性age的get和set方法
    public int aetAge(){
        return age;
    }
    public void setAge(int a){
        age = a;
    }
}

三、封装性的体现,需要权限修饰符来配合:

        1.Java规定的4种权限:(从小到大排列):private、缺省、protected、public

         2. 4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类

        3.具体的,4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类

                修饰符的话,只能使用:缺省、public

public class Order {
    private int orderPrivate;
    int orderDefault;
    public int orderPublic;

    private void methodPrivate(){
        orderPrivate = 1;
        orderDefault = 2;
        orderPublic = 3;

    }
    void methodDefault(){
        orderPrivate = 1;
        orderDefault = 2;
        orderPublic = 3;

    }
    public void methodPublic(){
        orderPrivate = 1;
        orderDefault = 2;
        orderPublic = 3;
    }
}

public class OrderTest {
    public static void main(String[] args){
        Order order = new Order();
        order.orderPublic = 1;
        order.orderDefault = 2;
        //'orderPrivate' 在 'Order' 中具有 private 访问权限
//        order. orderPrivate= 3;

    }
}

 总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构,体现了类及类的内部结构在杯调用时的可见性的大小。

封装性练习:

        创建程序,在其中定义两个类:Person和PersonTest类。定义如下:

        用setAge()设置人的合法年龄(0~130),用getAge()返回人的年龄。

        在PersonTest类中实例化Person类的对象b,调用setAge()和getAge()方法,体会Java的封装性。

public class personTest  {
    public static void main(String[] args){
        Person p1 = new Person();
        p1.setAge(12);

        System.out.println("年龄为:" + p1.getAge());
    }
}
public class Person {
    private int age;

    public void setAge(int a){
        if(a < 0 || a > 130){
            throw new RuntimeException("传入的数据非法");
        }else {
            age = a;
        }
    }

    public int getAge(){
        return age;
    }
}

类的结构之三:构造器(或构造方法、constructor)的使用

一、构造器的作用:

        1.创建对象。

        2.初始化对象的属性。

二、说明:

        1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器。

        2.定义构造器的格式:权限修饰符 类名(形参列表){}。

        3.一个类中定义的多个构造器,彼此构成重载。

        4.一旦我们显式的定义了类的构造器之后,系统就不在提供默认的空参构造器。

        5.一个类中,至少会有一个构造器。

public class PeronTest {
    public static void main(String[] args){
        //创建类的对象:new + 构造器
        Person p = new Person();

        p.eat();

        Person p1 = new Person("Tom");
        System.out.println(p1.name);
    }

}

class Person{
    //属性
    String name;
    int age;

    //构造器
    public Person(){
        System.out.println("Person....");
    }

    public Person(String n){
        name = n;
    }

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


    //方法
    public void eat(){
        System.out.println("人吃饭");
    }

    public void study(){
        System.out.println("人可以学习");
    }
}

构造器的练习:

练习一、

        1.在前面定义的Person类中添加构造器,利用构造器设置所有人的age属性初始值都为18。

        2.修改上提中类和构造器,增加name属性,使得每次创建Person对象的同时初始化对象的age属性值和name属性

public class Person{
    private int age;
    private String name;

    public Person(){
        age = 18;
    }

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

练习二、

        编写两个类,TriAngle和TriAngleTest,其中TriAngle类中声明私有的低边长base和高height,同时声明公共方法访问私有变量。此外,提供类必要的构造器。另一个类中使用这些公共方法,计算三角形的面积。

public class TriAngleTest {
    public static void main(String[] args){
        TriAngle t1 = new TriAngle();
        t1.setBase(2.0);
        t1.setHeight(2.4);
        System.out.println("base:" + t1.getBase() + ",height:" + t1.getHeight());

        TriAngle t2 = new TriAngle(5.1,5.6);
        System.out.println("base:" + t2.getBase() + ",height:" + t2.getHeight());
    }
}
public class TriAngle {

    private double base;//底边长
    private double height;//高

    public TriAngle(){

    }

    public TriAngle(double b,double h){
        base = b;
        height = h;
    }

    public void setBase(double b){
        base = b;
    }

    public double getBase(){
        return base;
    }
    public void setHeight(double h){
        height = h;
    }
    public double getHeight(){
        return height;
    }

}

 属性赋值的先后顺序:

1.默认初始化

2.显式初始化

3.构造器中赋值

4.通过“对象.方法” 或 “对象.属性”的方式,赋值

以上操作的先后顺序:1 - 2 - 3 - 4

public class UserTest {
    public static void main(String[] args){
        User u = new User();

        System.out.println(u.age);

        User u1 = new User(2);

        u1.setAge(3);
        System.out.println(u1.age);
    }
}
class User{
    String name;
    int age = 1;

    public User(){

    }

    public User(int a){
        age = a;
    }

    public void setAge(int a){
        age = a;
    }
}

 总结:今天学习了封装性的引入、封装性的体现、四种权限修饰符的理解、四种权限修饰符的测试、封装性练习:基本使用、构造器的基本理解、构造器使用的细节说明、构造器的练习:基本使用、总结属性赋值的过程。

每日计划:继续学习Java面向对象的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值