Day4 java面向对象之封装、继承、多态

封装

  • 程序设计追求“高内聚,低耦合”,高内聚:类的内部数据操作细节自己完成,低耦合:尽量少对外部类开放方法

  • public、private、protected与c++差不多一致

 

继承

  • java中只有单继承,没有多继承

  • 子类继承父类,用extends关键词表示

  • 子类继承父类所有的protected和public的方法和属性

  • 属性拥有四种:public、private、protected、default

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

  • 通过super去获得父类的属性,相当于父类的this指针

    • 使用super调用父类的构造方法,必须在构造方法中的第一个

    • super只能出现在子类的方法或构造方法中

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

  • 重写(override):与c++中的覆盖一致

    • 父类和子类中方法的返回值和形参不变,方法名字相同,改变方法的逻辑

    • 使用父类去new一个子类,会触发多态

    • 重写的修饰符范围可以缩小但不能放大,同异常

      • public > protected > default > private

多态

  • 动态编译:提高系统的可拓展性

  • java多态存在的条件

    • 存在继承关系

    • 子类重写父类的方法

    • 父类引用指向子类,调用该方法

  • instanceof:判断某个对象是否属于某个类,只有两边有关系才能比较

  • 静态代码块:在程序编译时就决定了,在类初始化时,先执行匿名代码块,再执行构造函数

  • 可以静态导入包

import static java.lang.Math.random
  • 被final修饰的类不能被继承

 

抽象类

public abstract class AbstractClass {
   public abstract void doSomething();
}

class Instance extends AbstractClass{
   @Override
   public void doSomething() {
       
  }
}
  • 只有方法名字,没有方法实现

  • 不能够new,需要被子类继承,并重写方法

  • 抽象类中可以有普通方法,抽象方法一定存在于抽象类中

 

接口

  • 更抽象,实现约束和实现分离

public interface UserService {
   void add();
   void delete();
   void update();
   void querry();
}
public class UserServiceImp1 implements UserService{
   @Override
   public void add() {
       
  }

   @Override
   public void delete() {

  }

   @Override
   public void update() {

  }

   @Override
   public void querry() {

  }
}
  • 可以利用接口来实现多继承,因为可以同时implements多个接口

  • 在接口中,所有方法默认都是public abstract的

  • 在接口中,所有常量都是 public static final的

  • 接口不能被实例化

内部类

成员内部类

public class InnerClass {
   public void outer() {
       System.out.println("Outer");
  }
   public class Inner{
       public void inner() {
           System.out.println("inner");
      }
  }

   public static void main(String[] args) {
       InnerClass innerClass = new InnerClass();
       Inner inn =  innerClass.new Inner();
       inn.inner();
  }
}
  • 好处:内部类可以获得外部类的私有属性和方法

静态内部类

  • 加上static修饰的类,就不能获得外部类的私有属性和方法了

局部内部类

  • 在方法里面定义的内部类

匿名内部类

  • new Person().function();

  •  

 

 

posted @ 2021-01-14 18:51  pumpkin_bo  阅读(63)  评论(0)    收藏  举报