• 面向对象的封装性



    面向对象的特征一:封装与隐藏

    package V;
    
    public class TestAnimal {
        public static void main(String[] args) {
            Animla a1=new Animla();
            a1.name="花花";
            a1.legs=-4;//这里赋值应该有限制,腿不应该是负数,赋值有点宽泛
            a1.info();
            a1.eat();
        }
    }
    class Animla {
        String name;
        int legs;
    
        public void eat() {
            System.out.println("动物进食");
        }
    
        public void sleep() {
            System.out.println("动物睡觉");
        }
    
        public void info() {
            System.out.println("name:" + name + " legs:" + legs);
        }
    
    }


    问题:当创建了类的对象以后,如果直接通过“对象.属性”的方式对相应的对象属性赋值的话,可能会出现不满实际情况的意外,我们考虑不让独享来直接作用于属性,而是通过“对象.方法”的形式,来控制对象对属性的访问。实际情况中,对属性的要求就可以通过方法来体现
    解决办法:
    1.

    package V;
    
    public class TestAnimal {
        public static void main(String[] args) {
            Animla a1=new Animla();
    a1.setLegs(-4);
            a1.setName("小花");
            a1.info();
            a1.eat();
        }
    }
    class Animla {
        String name;
        int legs;
    
        public void eat() {
            System.out.println("动物进食");
        }
    
        public void sleep() {
            System.out.println("动物睡觉");
        }
    
        public void info() {
            System.out.println("name:" + name + " legs:" + legs);
        }
    
        public void setLegs(int l){
            if (l>0 && l%2==0){
                legs=l;
            }else{
                System.out.println("输入数据有误");
            }
        }
        public void setName(String n){
            name=n;
        }
    }


    2.private 修饰的属性只能在本类中被调用,出了此类就不能被调用了

    package V;
    
    public class TestAnimal {
        public static void main(String[] args) {
            Animla a1=new Animla();
            a1.name="花花";
            a1.legs=-4;//这里赋值应该有限制,腿不应该是负数,赋值有点宽泛
            //a1.setLegs(-4);
            //a1.setName("小花");
            a1.info();
            a1.eat();
        }
    }
    class Animla {
        //private 修饰的属性只能在本类中被调用,出了此类就不能被调用了
        private String name;
        private int legs;
    
        public void eat() {
            System.out.println("动物进食");
        }
    
        public void sleep() {
            System.out.println("动物睡觉");
        }
    
        public void info() {
            System.out.println("name:" + name + " legs:" + legs);
        }
    
        public void setLegs(int l){
            if (l>0 && l%2==0){
                legs=l;
            }else{
                System.out.println("输入数据有误");
            }
        }
        public void setName(String n){
            name=n;
        }
    }


    3.封装的思想:(1)将类私有化,(2)提供公共的方法(setter&getter)来实现调用

     public void setLegs(int l){
            if (l>0 && l%2==0){
                legs=l;
            }else{
                System.out.println("输入数据有误");
            }
        }
        public int getLegs(){
            return legs;
        }
  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/KeepCalmAndNeverSayNever/p/10451691.html
Copyright © 2020-2023  润新知