zoukankan      html  css  js  c++  java
  • 面向对象的封装性


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

    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;
        }
  • 相关阅读:
    矩阵补全(Matrix Completion)和缺失值预处理
    【机器学习基础】对 softmax 和 cross-entropy 求导
    Mendeley使用小技巧
    [Active Learning] Multi-Criteria-based Active Learning
    回归树(Regression Tree)
    Typora + Mathpix Snip,相见恨晚的神器
    【机器学习之数学】02 梯度下降法、最速下降法、牛顿法、共轭方向法、拟牛顿法
    【机器学习之数学】01 导数、偏导数、方向导数、梯度
    “卷积神经网络(Convolutional Neural Network,CNN)”之问
    一篇带你完全掌握线程的博客
  • 原文地址:https://www.cnblogs.com/KeepCalmAndNeverSayNever/p/10451691.html
Copyright © 2011-2022 走看看