1.this和super的区别
2.多态性的表现:(类的属性没有多态性,属性不存在覆盖的问题,方法会有覆盖,所以会有多态)
1.多态使用的前提:
a:要有继承关系
b:要有方法的重写
Person p=new Man();//向上转型(编译看左,运行看右)
关于向下转型:a:要使用强转符()b:为了不报ClassCastException,最好在向下转型之前,进行instance of 进行判断
egg: if(p.instance of Man){
................
}else if(p.instance of Women)
{
.........................
}
3. “==”和equals()方法的区别?
①:"=="
当时基本数据类型的时候?是根据判断数据类型的数值是否相等,相等返回true,否则返回false, 注意:当'=='两边的基本数据类型不相同的时候,也是比较的数据值的大小是否相等。
当数据是引用数据类型的时候?是比较等号两边引用类型变量的地址值是否相等
②:equals()
a: 只能处理引用类型的变量b:在Object类中,发现equals()仍然比较的是两个地址值是否相等,这是因为该类没有重写equals()方法
4.static关键字的
static修饰属性(那么该属性也称作类变量):
1.由该类创建的所以对象,都共有这一个属性;
2.其中当一个对象对该属性进行修改时,那么也会导致其他对象的该属性改变(static修饰的属性称为类变量,非static修饰的属性称为实例变量);
3.类变量随着类的加载而加载,而且唯独只有一份,在静态域中存放;
4.静态的变量可以直接通过'类名.类变量'来直接进行调用;
5.类变量的加载是早于对象的,所以放对象创建好之后,也可用“对象名.类变量”来进行调用;但是“类名.实例变量”是不成立的,因为实例变量是由对象进行调用的;
static修饰方法名(也称作类方法)
1.随着类的加载而加载,在内存中也只有一份;
2.也可以直接通过“类名.类方法名”来直接调用方法。
3.静态方法内部只可以调用静态的属性和方法,而不能调用非静态的属性和方法;反之,非静态的方法可以调非静态的属性和方法也可以调用静态的属性和方法,原因是:类方法是随着类的加载而加载,然而非静态的方法只能是对象的调用,然而此时对象还没有创建出来,所以不能调用非静态的方法。住:静态方法中不可以有this,super关键字。原因如上所述!
注:静态结构的(属性,方法,代码块,内部类)的声明周期都要早于非静态的结构,同时垃圾回收器回收的时候也是要晚于非静态的结构!
5.代码块(只可以用static修饰)
①静态代码块:
②非静态代码块:
a:可以对类的属性(静态的&非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的&非静态的);
b:里边可以有输出语句;
c: 一个类中可以有多个非静态代码块,多个非静态代码块之间按照编程的顺序来进行执行;
d:每创建一个类的对象,非静态代码块就加载一次;
e:非静态代码块的执行顺序要早于构造器;
注:关于类的赋值的操作:a:默认的初始化b:显示的初始化或者代码块的初始化(此处两个按照编程的顺序来执行),c:构造器中;d:通过方法对对象的相应属性进行修改!
6.final关键字
final:最终的,可以用来修饰属性,方法,类
a:final修饰类:该类不可以被继承。如 String类 StringBuffer类 System类
b:final修饰方法:该方法不可以被重写。如Object类中的getClass()方法
c:final修饰属性:此属性就变成一个常量,一旦初始化之后,就不可以在进行赋值。习惯上,该常量用大写字母表示。此常量可以被赋值的位置:①不可以使用默认的初始化。如 final int a; 这是错误的!可以显示赋值。 如 final int a=100;②在代码块总进行赋值③在构造器中进行赋值 。 总之要在对象创建好之前赋值完成.
d: 变量用static final 修饰称为:全局常量!。
7.abstract:抽象的,可以用来修饰类和方法
a:abstract 修饰类:抽象类
1.不可以被实例化
2.抽象类有构造器(凡是类都有构造器)
3.抽象方法所在的类一定是抽象类。
4.抽象类中可以不存在抽象方法
b:abstract修饰方法:抽象方法
1.格式 没有方法体 ,包括{ } 如:public abstract void eat();
2.抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
3.若子类继承抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,既可以实例化。
4.若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的!
8.接口
a:接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,不能包含变量,和一般的方法。
b:接口是没有构造器的。
c:接口定义的就是一种功能。此功能可以被类所实现(implements)。
d:实现接口的类,必须重写其中的所有的抽象方法,方可实例化。若没有重写所有的抽象方法,则此类仍为一个抽象类。
e:类可以实现多个接口。---------->java中的类的继承是单继承
f:接口与接口之间也是继承关系,而且可以实现多继承
g:接口与具体的实现类之间也存在多态性