java基础01

Java基础01

1.继承

继承是因为对象之间属性或者方法存在交集因此可以将两者通过extend形式结合节省代码量?。子类实际上是将父类定义的更加的具体化的一种手段。父类表示的范围大,而子类表示的范围小

  • 继承的限制

    • 一个子类只能够继承一个父类,存在单继承局限 即是不能多重继承,但是可以多层继承

    • 在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)

    class A {
        private String msg;
      
        public void setMsg(String msg) {
            this.msg = msg;
        }
        public String getMsg() {
            return this.msg;
        }
    }
      
    class B extends A {
        public void print() {
            //System.out.println(msg); // 错误: msg定义为private,不可见
        }
    }
      
    public class TestDemo {
        public static void main(String args[]) {
            B b = new B();
            b.setMsg("张三");
            System.out.println(b.getMsg());
        }
    }
    //可以通过间接方法访问父类private属性
    
    • 在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。现在默认调用的是无参构造,而如果这个时候父类没有无参构造,则子类必须通过super()调用指定参数的构造方法,且在调用时super(参数)在子类构造方法所有语句之前。
    class A {
        public A() {         // 父类无参构造
                  System.out.println("*************************") ;
        }
    }
    class B extends A {
        public B() {         // 子类构造
            	  super();//隐藏的super()
                  System.out.println("#########################");
        }
    }
    public class TestDemo {
        public static void main(String args[]) {
                  B b = new B() ;   // 实例化子类对象
        }
    }
    //输出
    //*************************
    //#########################
    

    2.封装

    通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口

  • 权限修饰符

    • // 定义变量 [修饰符] 变量类型 变量名称; [修饰符] 变量类型 变量名称 = 初始值;

    • 权限对应的关系表
    修饰符 本类 本包的类 不同包的子类 其他包
    private × × ×
    默认(default) × ×
    protected ×
    public
    • 封装的作用

      • 未封装前
      public class Person{
          public String name;
          public double money;
      }
          
      public class Test{
          public static void main(String[] args){
              Person person = new Person();
              person.money = 500;// 初始金额500元
              System.out.println("购买一张桌子,花费200元");
              person.money -= 200;
              System.out.println("购买二手PSP,花费350元");
              person.money -= 350;
              System.out.println("目前余额为:" + person.money);// -50
          }
      }
          
      
      • 封装不完全
      public class Person{
          public String name;
          public double money;
          
          // 定义一个方法,用于设置money属性的值
          public void setMoney(double money){
              if(money >= 0){
                  this.money = money;
              }
          }
      }
      public class Test{
          public static void main(String[] args){
              Person person = new Person();
              person.money = 500;// 初始金额500元
              System.out.println("购买一张桌子,花费200元");
              person.setMoney(person.money - 200);
              System.out.println("购买二手PSP,花费350元");
              person.setMoney(person.money - 350);
              System.out.println("目前余额为:" + person.money);// 300
          }
      }
      //这里依然可以通过直接new父类访问属性不安全所以应该将属性的权限修饰符修改为private
      
      • 封装后
      public class Person{
          public String name;
          // 声明money属性为private权限
          private double money;
          
          // 定义一个方法,用于设置money属性的值
          public void setMoney(double money){
              if(money >= 0){
                  this.money = money;
              }
          }
          // 定义一个方法,用于获取money属性的值
          public double getMoney(){
              return this.money;
          }
      }
      public class Test{
          public static void main(String[] args){
              Person person = new Person();
              person.setMoney(500);// 初始金额500元,此时已经不能使用对象.属性的方法赋值
              System.out.println("购买一张桌子,花费200元");
              person.setMoney(person.getMoney() - 200);
              System.out.println("购买二手PSP,花费350元");
              person.setMoney(person.getMoney() - 300);
              System.out.println("目前余额为:" + person.getMoney());// 300
          }
      }
          
      

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦