java笔记寒假09-封装和继承

Posted on 2022-01-07 17:41  超喜欢小小  阅读(41)  评论(0)    收藏  举报

第八天、封装和继承

一、封装 (字面意思)

  该露的露,该藏的藏

  程序设计要追求“高内聚,低耦合”,高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合就是仅暴露少量的方法给外部使用。

  封装(数据的隐藏) 通常,应禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问,这称为信息隐藏。

  私有属性:get/set

  封装大多数时候是对于属性

  再写s1.name会报错

  所以需要提供一些可以操作这个属性的方法

  public的get、set方法

  快捷键alt+ insert 可以自动生成get、set方法

  封装的意义:提高代码的安全性,保护数据

        隐藏代码的实现细节

        统一接口

        增加系统的可维护性

二、继承(这部分学过一点,笔记没做很详细)

1、

 

 

子类继承了父类,就会拥有父类的全部方法(修饰符必须是public)

java中,所有类都默认直接或间接继承Object类

快捷键ctrl+h

子类只有一个父类,父类可以有多个子类

2、super

太懒了太懒了,直接截图做笔记了

 

 

super可以调用父类的构造方法,必须在构造方法的第一个

super必须只能出现在子类的方法或者构造方法中,super只能在继承条件下才能使用

super和this不能同时调用构造方法

this.是当前类

私有的无法被继承,也无法被super调用

 

 

 

 

3、方法的重写

先是静态方法,只有在静态方法中,方法的调用只和左边,定义的数据类型有关

 

 

 package com.oop;
 
 import com.oop.Demo03.A;
 import com.oop.Demo03.B;
 import com.oop.Demo03.Student;
 
 public class Application {
 
     public static void main(String[] args) {
         //方法的调用只和左边,定义的数据类型有关
         A a = new A();
         a.test(); //A=>test()
 
         //父类的引用指向了子类
         B b = new A();
         b.test(); //B=>test()
    }
 }
 package com.oop.Demo03;
 
 //重写都是方法的重写,和属性无关
 public class B {
     public static void test(){
         System.out.println("B=>test()");
    }
 }
 package com.oop.Demo03;
 
 public class A extends B{
 
     public static void test(){
         System.out.println("A=>test()");
    }
 }

非静态方法

 

 

 package com.oop;
 
 import com.oop.Demo03.A;
 import com.oop.Demo03.B;
 import com.oop.Demo03.Student;
 
 public class Application {
 
     public static void main(String[] args) {
         //在静态方法中,方法的调用只和左边,定义的数据类型有关
         //重写只和非静态方法有关
         //重写的修饰符只能是public
         //有继承关系,并且是子类重写父类的方法
         A a = new A();
         a.test(); //A=>test()
 
         B b = new A();
         b.test(); //A=>test()
    }
 }
 package com.oop.Demo03;
 
 //重写都是方法的重写,和属性无关
 public class B {
     public  void test(){
         System.out.println("B=>test()");
    }
 }
 package com.oop.Demo03;
 
 public class A extends B{
 
     //override 重写
     @Override//注解:有功能的注释!
     public void test() {
         System.out.println("A=>test");
    }
 }

  重写:方法名必须相同

     参数列表必须相同

     修饰符:范围可以扩大但不能缩小 public>protected>default>private

     抛出的异样:范围可以被缩小,但不能扩大;

  为什么需要重写:父类的功能子类不一定需要,或者不一定满足