数组
数组的定义
- int[] ad=new int[10];
- int [] ad={};
- int [] ad=int[]{};
- int ap[]=new int[]{}
- 定义的同时自动赋初值
static的用法以及特点
- 用static定义的类,或者方法名,可以自接类名点 使用 调用 ,它的数据存在于方法区,并且只有一份, 静态块 static{}
- 在类加载的时候运行,所以在静态块里面的数据,会在第一时间运行, 一般用来修饰,音乐,视频,
- 非静态变量,不能再静态方法里使用,因为静态修饰的会第一时间加载
输出结果
final
-
通常用来修饰常量,(常量不可以被改变) 定义名称全部大写,单词之间用下划线来分开,一般用puablic 修饰
-
public static final int HELLO_WORLD=10;
static final public int B=10;
final static public int C=10;
以上定义方式全部正确 -
用final 修饰的 方法不能被重写,类不能被继承,变量不能被改变,通常一般不会单独使用,
-
不会被自动转型
重写与重载
重写
- 发生在有继承的子类,和有实现接口的类
- 方法名一样,返回类型一样,参数类型和个数要一样,访问权限修饰符,必须大于或者等于父类,
- 静态方法不能被重写
- final 修饰的方法不能被重写,但是可以被继承
- 重写必须继承
- 子类在调用的时候,要看父类的类型,如果不是则不能调用父类的重写方法
重载
- 看方法的参数
- 方法名一样’
- 参数的类型或者 个数不一样
面向对象特点,封装,继承,多态
我的理解 , 就是把一个个 行为,和需要的属性,封装在一个类中,减少了复杂性
封装
- 把类里私有的数据,(private) 通过(public) 行为公开来进行访问,让对象不能直接点出来进行修改数据,增加了数据的安全
- 通过条件来使 属性不被胡乱修改,不会让私有属性直接暴露在其他类里
继承
- 关键字extends
- 单继承,一个类只能继承一个父类, 如果该类没有继承,那么它将默认继承Object,所以以此推来,每个类都继承的Object
- 如果父类有构造方法,会率先执行父类构造方法
- 之类可以通过 super关键字来调用父类的构造方法进行传参,也可以通过 super点父类的方法进行调用
- super 必须写在一个方法的第一行,和this 一样
- super 代表着父类的实例
继承的好处
- 增加代码的复用性,父类所拥有的,之类可以使用 private 修饰的除外 ,
- 满足 is a (是一个)的特性 ,
- 向上转型,增加了代码的扩展性
- 子类可以重写父类的方法, 方法签名一样 返回值一样 ,之类的修饰访问权限,必须要大于 或者等于 父类
接口
- 接口可以继承接口
- 接口里面只能有抽象方法,和常量
- jdk 1.8后,里面可以允许 静态方法
- 一个类可以实现多个接口 关键字(implements)
- 实现接口后必须实现里面的所有抽象方法
-
接口的用途
- 当在一个程序中,只有几个类需要实现同一个方法,而其他类不需要的时候 可以使用
-
接口的好处
增加了程序的复用性,扩展性
多态
- 如果只有一个继承,那么实现多态,一定会用到向上转型,和重写
- 多个子类继承,同一个父类,并且重写父类的方法,不同的子类对象调用同一个方法,会有不同的作用.
- 对象的类型必须是父类
- 如果父类和子类有一个变量名相同,那么对象调用那个变量名,看对象的类型
输出结果
如果一个子类,继承,又实现了接口,那么当它要创建对象调用方法的时候,对象的类型,决定他可以调用什么方法,如果类型是接口那么它只能调用接口和它自己的方法,不能去调用继承的方法
对象的强制转换
-
看对象的类是否实现接口,或者继承与某个父类,如果继承或者实现了,就可以强转,
-
达到了不同的类型调用不同的方法,对象多态
-
请看以下例子
-
这里p它只能输出 ap接口里的方法
再看一个例子:
抽象类
- abscract 修饰
- 抽象类里面允许普通方法 ,抽象方法 main函数
- 可以继承抽象类,可以实现接口
- 如果派生类,类型比较统一,且又少,那么可以考虑使用抽象类
- 因为抽象类,只能extends 扩展性不好