简述Java面向对象三大特征:封装、继承、多态

封装:
  • 把对象的全部属性和服务结合在一起,形成不可分割的独立单位;
  • 尽可能隐藏内部细节。(数据隐藏、隐藏具体实现的细节)
    public、private、protected、default
  • public:既可以跨类访问,也可以跨包(package)访问
  • private:只能被该类对象访问,子类不能访问,更不能跨包访问
  • protected:只能被该类本身和子类访问,即使子类不在包中也可以访问
  • default:即不添加任何修饰符,只允许同一个包进行访
继承:
 1. is a 关系(eg:经理 is a 职员)
  • 初始化子类必须先初始化父类(虚拟机自动完成)因为子类的构造方法中会调用父类的构造方法
  • 单继承性:一个子类只能继承一个父亲
  • 关键字super:用来引用自己的父类,比如父类的方法和属性都是可以访问的
  2.方法覆盖(也叫方法重写)
  • 返回类型、方法名称、参数列表必须与它所覆盖的方法相同
  • 访问权限不能缩小
  • 不能抛出更多异常
  3.方法重载
  • 同一个方法(包括父类),方法名相同,参数列表不同,返回类型可相同可不同

  4.组合与继承

  • 组合是”has-a“的关系。组合指在新类中创建原有类的对象,重复利用已有类的功能。而继承是根据其他类的实现来定义一个类的实现。
  • 是面向对象中两种代码复用的方式。
  • 能使用组合就尽量不要使用继承。除非是”is-a“的关系否,则不要轻易使用继承。
多态:
  • 简单说就是子父类(接口或实现类)中的类型转换
  1. 属性的特点:属性不是多态的,当子类中出现相同属性时,以左边的引用为准。
class A{
  int num = 3;
}
class B extends A{
  int num = 5;
}
main{
  A a = new B();
  sop(a.num);  //输出3
  B b = new B();
  sop(b.num);  //输出5
}
 2.非静态私有函数特点:
  • 编译时期:引用变量所属类(父类)中是否有调用方法,如果有编译通过,若没有编译失败。
  • 运行时期:如果子类复写了父类方法,运行子类中的方法,若没有运行父类方法
  3.静态函数特点:
  • 和属性一样,static方法不是多态的,无论编译还是运行都参考左边。
  4.instanceof运算符:
  • 前面是一个引用类型变量后面是一个类,用于判断前面的对象是否是后面的类的实例,如果是返回true,若不是返回false,避免了ClassCastException。

public interface Animal {
  public abstract void eat();
}

public class Cat implements Animal{
  public void eat(){
    System.out.println("chi yu");
  }
  public void catchMouse(){
    System.out.println("zhu lao shu");
  }
}

public class Dog implements Animal{
  public void eat(){
    System.out.println("chi gu tou");
  }
  public void kanHouse(){
    System.out.println("kan men");
  }
}

public class Test {
  public static void main(String[] args) {
  Animal a = new Cat();
  function(a);
  }

  public static void function(Animal a){
  a.eat();
  if(a instanceof Cat){
    Cat c = (Cat)a;
    c.catchMouse();
  }else if(a instanceof Dog){
    Dog d = (Dog)a;
    d.kanHouse();
    }
  }
}

原文地址:https://www.cnblogs.com/wangqi327/p/4442603.html