zoukankan      html  css  js  c++  java
  • 简述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();
        }
      }
    }

  • 相关阅读:
    循序渐进学习XHTML
    一些常用正则表达式
    输入框限制
    Oracle 取随机数
    安装部署中的数据库打包和快捷方式启动浏览器
    游标小例
    查询列数
    临时表简介
    Update动态更新
    sql 多列转一列
  • 原文地址:https://www.cnblogs.com/wangqi327/p/4442603.html
Copyright © 2011-2022 走看看