static关键字
-
什么时候成员变量声明为实例变量?
-
所有对象都有这个属性,单杀每个属性的值不一样(身份证,名字等)
-
-
什么时候成员变量声明为静态变量呢?
-
所有对象都有这个属性,并且所有对象的这个属性的值都一样(中国人的国际都是中国)
-
-
static
-
static修饰的方法都是静态方法
-
static修饰的变量都是静态变量
-
static修饰的所有元素都是类级别的特征,和具体的对象无关1!
-
![](C:\Users\Administrator\Desktop\java学习的图片\8A87@N(`GJI55VLK67BS45D.png)
继承
-
继承的基本作业是:代码复用,但是继承最重要的作业是:有了继承才有了以后“方法覆盖”和多态机制
-
继承语法形式
-
修饰符列表 class 类名 extends 父类名{
类体 =属性+方法
}
-
-
java的继承只支持单继承,一个类不能同时继承很多类
-
在java语言当中子类继承父类都继承哪些数据?
-
私有的不支持继承
-
构造方法不支持继承
-
其他数据能被继承
-
-
虽然java的继承只支持单继承,但是一个类可以间接继承别的类
比如 c extends b{
}
b extends a{
}a extends d{
}
c继承b,也间接继承a和d
-
java语言当中所有类都默认继承object类
方法覆盖(重写)
-
方法重载又叫voerwite
-
什么时候使用方法重写
-
当父类的方法已经无法满足当前子类的业务需求,子类游戏要江父类中继承过来的方法进行重新编写,这个重新编写的过程叫方法重写
-
-
声明条件满足之后会发生方法重写?
-
发生在具有继承关系的父子类中
-
访问权限不能更低,只能更高
-
抛出异常不能更多,只能更少
-
重写只针对方法,不针对属性
-
-
方法重写的时候 修饰符,数据类型。方法名都必须一样
多态
-
多态涉及到的几个概念
-
向上转型
-
子类型--》父类型
-
又叫自动类型转换
-
-
向下转型
-
父类型--》子类型
-
又叫强制转型
-
-
无论是向上还是向下转型,两种类型之间必须就继承关系
-
-
Animal a1 = new cat();// Animal是父类,cat是子类,创建一个animal类型的a1 cat对象,向上转型,子类变成父类 a1.move();//这是调用的是cat类里面的move方法,并不是animal类中的move方法,且不论cat中的move是否重写,都是调用的cat类中的move方法
-
在上面向上转型后的方法调用中,只能调用 原本的父类他子类共有的方法 ,如果是子类特有的方法 就不能
-
假设想让以上对象执行catchMouse()方法怎么办?
-
a1是无法直接调用的,因为a1的类型Animal里面没有atchMouse()方法,
-
我们可以江a1强行转换为cat类型a1的类型animal (父类)转换成cat类型(子类)叫做向下转换
-
无论是向上还是向下转型,两种类型之间必须就继承关系
Cat c2 = (Cat)a1;//想下转型,强制转型
-
-
Animal a2 = new Bird();//向上转换,子类型到父类型 Cat c3 = (Cat)a2;//这种编译是没有问题的,因为a2已经转换到了Animal这种类型,Animal又和cat是继承关系,所以语法合格,但是系统运行的时候会出现异常,因为虽然a2已经是Anima类型,但是他jvm堆内存中依然是bird类型,而bird类和cat没有继承关系,无法转换
-
上述异常只会出现在向下转型中,但是如何避免这种异常出现呢使用instanceof运算符
-
语法格式
(引用 intstanceof 数据类型名)
-
以上运算符的执行结果类型是布尔类型,结果只能是ture/false
-
关于运算结果ture/false:
假设:(a intstanceof Animal)
ture表示:
a这个引用指向的对象是一个Animal类型
false表示:
a这个引用指向的对象不是一个Animal类型
-
final关键字
-
final修饰的类无法被继承
-
final修饰的方法无法被覆盖
-
final修饰的变量一旦赋值之后,不可以在重新赋值
-
final修饰的引用虽然指向每个对象之后不能指向其他对象,但是所指向的对象的内部的内存是可以改变的
-
final修饰的引用,一旦指向某个对象之后,不能在指向其他对象
-
总和考虑,java语言最终规定实例变量 使用final修饰之后,必须手动赋值,不能采用系统默认值;
* //第一种解决方案 public class FinalTest02{ final int age = 10; *// 第二章解决方案 final int num; public FinalTest02(){//在构造方法中赋值与第一种方法意义一模一样 this.num = 200; } }
final User user = new User(300);//final修饰的引用,一旦指向某个对象之后,不能在指向其他对象 user.id = 50;//final修饰的引用虽然指向每个对象之后不能指向其他对象,但是所指向的对象的内部的内存是可以改变的
-
final修饰的实例变量一般是不可变的,这种变量 一般和static留恋和使用,常量的语法格式为:public static final 类型 常量名 =值;
//public static final 类型 常量名 =值; static final String country = "中国";
修饰符的范围
-
public 表示公开的,在任何位置都能访问
-
protected 同包,子类
-
缺省 同包
-
private 表示私有的,只能在本类中访问
-
当某个数据只希望子类使用,使用protected进行修饰
-
修饰符的范围:
-
private《缺省《protected《public