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 |
多态分为编译时的多态和运行时多态。其中编译时多态 也可称为静态多态
运行时的多态为动态多态,主要通过动态绑定来实现,常说默认的多态
多态 为了应对不同的变现形式
其实就是 方法的重载,主要根据参数列表的不同来区分不同的函数
静态多态 不需要继承
例如:品酒大师
三个杯子 倒了 3杯酒
酒 a= 五粮液;
酒 b= 茅台酒;
酒 c= 二锅头。
声明一个 酒的类,三种不同的酒 相当于不同的子类。
只有在运行时 才能知道 喝的什么酒。
所谓动态多态就是指 引用在不同的情况下所表现的实际对象。
(1)继承(实现接口)。在多态中必须存在 父类与子类的关系。
(2)重写。子类必须对父类的某些方法进行重新定义,在调用这些方法时 就会调用子类的方法。
(3)向上转型:父类引用指向子类的对象
向上转型:子类的对象转换为父类类型
例如:
Wine wine=new WLY();—向上转型
Wine wine=new Wine();–正常实例化对象
子类的单独定义的方法会丢失,能访问子类重写父类的方法
养了一堆宠物 有狗 有猫。宠物喜欢吃什么 也要根据宠物的类型 来选择喂食
狗–骨头
猫–鱼
if(animal is dog ){
food=bone;
eat food;
}else if(animal is cat){
food= fish;
eat fish.
}
可否写一个方法 来实现所有宠物的喂食
向下转型是把父类对象转换为子类对象
Animal animal=new Animal();
Cat cat = (Cat)animal —-不对的
把一个动物强制转换为 猫,如果这个动物是只狗,狗是变不成猫的
向下转型必须得有向上转型作为前提。因为只有子类相对应的才可以转换
代表这个动物是 猫,之后 把动物再变回为猫。—打回原形
在Java当中的一个类中在声明一个类 就叫 内部类。
例如:
(1)(普通)成员内部类:与成员level一样,内部类中不能存在 static 关键字,不能够声明静态的方法、属性、静态代码块;
最普通的内部类
(2)静态(成员)内部类:使用static修饰的成员内部类
(3)(普通)局部内部类:局部范围内有效的内部类(例如:方法里面)
(4)匿名(局部)内部类:没有名字的局部内部类
3.成员内部类定义
(1)定义:与我们的成员变量一样,可以声明类名,在成员内部类中可以声明属性和方法
(2)作用:a、成员内部类可以无限制访问外部类的变量和方法(包括private修饰的)
b、内部类可以有多个
c、成员内部类与外部类如果存在同名的成员变量或方法,优先是内部的。如果访问外部类的
需要 Outter.this.(变量或方法名)
(1)成员内部类访问外部类 无限制
(2)外部类访问内部类的成员,不是无限制的。
首先要传建一个内部类的对象,然后通过对象来访问
不是在类里面操作,如果是其他类要访问时,要访问内部类,首先实现外部类的实例化之后再实例化内部类
(1)在外部类对象初始化基础之上初始化内部类,调用内部类的构造函数
Outter.Inner inner=outter.new Inner();
(2)通过外部类的成员方法获得成员内部类的对象,然后访问其变量和方法
使用 static修饰的成员内部类叫做静态内部类
定义格式如下:
外部类不是静态也可以声明静态内部类
静态内部类 要类比 静态成员变量
静态内部类可以通过外类直接调用 new Outter.Inner();
静态内部类内部可以直接访问外部类中所有的静态变量和方法(包含private)
定义在代码块、方法体等的类叫局部内部类。
—局部变量 类比
不能够有 public protected private 以及 static 修饰
局部内部类只是在一个方法或区域里起作用
没有名字的局部内部类
必须要继承一个父类或者实现一个接口
定义形式:
正常初始化对象:
局部内部类的区别 局部的位置不同
匿名内部类当中不能够有静态属性和静态方法
匿名内部类 不需要新建一个类 而是通过匿名的形式吧 实现方法的重写
匿名内部类尤其针对 Android开发 例如 监听 鼠标事件 键盘 触屏输入
(1)成员内部类
(2)静态内部类
(3)局部内部类
(4)匿名内部类
a、每个内部类都可以独立的继承或实现一个接口,而外部类也可以继承一个直接父类。 —多继承的一种表现
b、通过内部类可以实现对外界的隐藏。–封装
c、内部类可以无限制的使用外部类的成员变量(包括私有),不用生成外部类的对象
d、匿名内部类可以简化代码的编写,方便编写事件驱动的程序、线程程序。
e、成员内部类 静态内部类 可以对比 成员变量和静态变量
局部内部类 匿名内部类 可以对比局部变量
封装 继承 多态
面向对象的思路去设计程序
原文:https://www.cnblogs.com/hsiehchou/p/10381053.html