zoukankan      html  css  js  c++  java
  • java面向对象3

    1、访问控制权限(public,private,protected,default)

    public>protected>default>private
    java中用来控制类及类的方法和变量访问权限。
    (1)public :公共的 表示包(package)内及包外的任何类(包括子类和普通类)都可以访问。—最开放
    (2)protected:受保护的 表示包内的任何类及包外继承了该类的子类才能访问,突出继承。
    (3)default:默认的 表示包内的任何类都可以访问,但是包外的任何类都不能访问。
    (4)private:私有的 只有本类可以访问,包内外的任何类均不能访问。—封装

    访问控制修饰符 同类 同包 子类 不同的包
    public 1 1 1 1
    protected 1 1 1 0
    default 1 1 0 0
    private 1 0 0 0

    2、多态定义

    多态分为编译时的多态和运行时多态。其中编译时多态 也可称为静态多态
    运行时的多态为动态多态,主要通过动态绑定来实现,常说默认的多态
    多态 为了应对不同的变现形式

    3、静态多态

    其实就是 方法的重载,主要根据参数列表的不同来区分不同的函数
    静态多态 不需要继承

    4、动态多态

    例如:品酒大师
    三个杯子 倒了 3杯酒
    酒 a= 五粮液;
    酒 b= 茅台酒;
    酒 c= 二锅头。
    声明一个 酒的类,三种不同的酒 相当于不同的子类。
    只有在运行时 才能知道 喝的什么酒。
    所谓动态多态就是指 引用在不同的情况下所表现的实际对象。
    (1)继承(实现接口)。在多态中必须存在 父类与子类的关系。
    (2)重写。子类必须对父类的某些方法进行重新定义,在调用这些方法时 就会调用子类的方法。
    (3)向上转型:父类引用指向子类的对象

    5、向上转型

    向上转型:子类的对象转换为父类类型
    例如:
    Wine wine=new WLY();—向上转型
    Wine wine=new Wine();–正常实例化对象
    子类的单独定义的方法会丢失,能访问子类重写父类的方法

    6、动态多态小案例–动物喂食

    养了一堆宠物 有狗 有猫。宠物喜欢吃什么 也要根据宠物的类型 来选择喂食
    狗–骨头
    猫–鱼
    if(animal is dog ){
    food=bone;
    eat food;
    }else if(animal is cat){
    food= fish;
    eat fish.
    }
    可否写一个方法 来实现所有宠物的喂食

    7、向下转型

    向下转型是把父类对象转换为子类对象
    Animal animal=new Animal();
    Cat cat = (Cat)animal —-不对的
    把一个动物强制转换为 猫,如果这个动物是只狗,狗是变不成猫的
    向下转型必须得有向上转型作为前提。因为只有子类相对应的才可以转换
    代表这个动物是 猫,之后 把动物再变回为猫。—打回原形

    8、.内部类定义

    在Java当中的一个类中在声明一个类 就叫 内部类。
    例如:

    class Outter{
    成员变量;
    class Inner{
     
    }
    成员方法;
    }

    9、内部类分类

    (1)(普通)成员内部类:与成员level一样,内部类中不能存在 static 关键字,不能够声明静态的方法、属性、静态代码块;
    最普通的内部类
    (2)静态(成员)内部类:使用static修饰的成员内部类
    (3)(普通)局部内部类:局部范围内有效的内部类(例如:方法里面)
    (4)匿名(局部)内部类:没有名字的局部内部类
    3.成员内部类定义
    (1)定义:与我们的成员变量一样,可以声明类名,在成员内部类中可以声明属性和方法
    (2)作用:a、成员内部类可以无限制访问外部类的变量和方法(包括private修饰的)
    b、内部类可以有多个
    c、成员内部类与外部类如果存在同名的成员变量或方法,优先是内部的。如果访问外部类的
    需要 Outter.this.(变量或方法名)

    10、成员内部类与外部类的访问

    (1)成员内部类访问外部类 无限制
    (2)外部类访问内部类的成员,不是无限制的。
    首先要传建一个内部类的对象,然后通过对象来访问

    11、成员内部类的初始化

    不是在类里面操作,如果是其他类要访问时,要访问内部类,首先实现外部类的实例化之后再实例化内部类
    (1)在外部类对象初始化基础之上初始化内部类,调用内部类的构造函数
    Outter.Inner inner=outter.new Inner();
    (2)通过外部类的成员方法获得成员内部类的对象,然后访问其变量和方法

    12、静态内部类

    使用 static修饰的成员内部类叫做静态内部类
    定义格式如下:

    class Outter{
     
    static class inner{
     
    }
    }

    外部类不是静态也可以声明静态内部类
    静态内部类 要类比 静态成员变量
    静态内部类可以通过外类直接调用 new Outter.Inner();
    静态内部类内部可以直接访问外部类中所有的静态变量和方法(包含private)

    13、局部内部类

    定义在代码块、方法体等的类叫局部内部类。
    —局部变量 类比
    不能够有 public protected private 以及 static 修饰

    class Outter{
    public void func(){
    class inner{
     
    }
    }
    }

    局部内部类只是在一个方法或区域里起作用

    14、匿名内部类

    没有名字的局部内部类
    必须要继承一个父类或者实现一个接口
    定义形式:
    正常初始化对象:

    类名 对象名=new 类名();
    匿名内部类:
    new 父类构造方法(){
    //重写一个函数
    修饰符 返回参数类型 方法名(参数列表){
     
    }
     
    };

    局部内部类的区别 局部的位置不同
    匿名内部类当中不能够有静态属性和静态方法
    匿名内部类 不需要新建一个类 而是通过匿名的形式吧 实现方法的重写
    匿名内部类尤其针对 Android开发 例如 监听 鼠标事件 键盘 触屏输入

    Lisenter(){
    @override
    MouseMoniter(){
     
    }
     
    };

    15、总结内部类

    (1)成员内部类
    (2)静态内部类
    (3)局部内部类
    (4)匿名内部类
    a、每个内部类都可以独立的继承或实现一个接口,而外部类也可以继承一个直接父类。 —多继承的一种表现
    b、通过内部类可以实现对外界的隐藏。–封装
    c、内部类可以无限制的使用外部类的成员变量(包括私有),不用生成外部类的对象
    d、匿名内部类可以简化代码的编写,方便编写事件驱动的程序、线程程序。
    e、成员内部类 静态内部类 可以对比 成员变量和静态变量
    局部内部类 匿名内部类 可以对比局部变量

    16、面向对象总结

    封装 继承 多态
    面向对象的思路去设计程序

  • 相关阅读:
    Spring Boot入门篇(基于Spring Boot 2.0系列)
    webpack性能优化配置
    Vuex的通俗详解
    Vuefilter() 过滤器
    transition页面加载触发问题解决方案
    VUE render VS template
    provide & inject 跨组件传值
    Vue 组件通讯(组件传值)
    js封装 DOM获取
    GIT SVN 版本管理 git + gitHub
  • 原文地址:https://www.cnblogs.com/hsiehchou/p/10381053.html
Copyright © 2011-2022 走看看