如何实现向下转型?需要注意什么问题?如何解决此问题?
声明的是一个父类的引用。强转成子类,子类的功能更强大。可以用子类中特有的方法。 使用强转符();
Person p=(New )
classCastException
使用instanceof在进行向下转型前判断。
if(){
}
2、==和equals有什么区别?
equals object中还是比较地址,和==一样,没有区别
String date重写了equals 比较的是 实体内容。
3.class User{
}
4.写出8种基本数据类型及其对应的包装类
5.基本数据类型、包装类、与String 三者之间如何转换
一、多态性:
1.多态性的理解:可以理解为一个事物的多种形态。
2.何为多态性:父类的引用指向子类的对象。
3.多态性的使用:虚拟方法调用。
4.多态性的使用前提
1、类的继承关系 2、方法的重写
向上转型:多态
向下转型:
为什么要使用向下转型: 想用子类的属性和方法。所以要向下转型。内存中实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用。、
使用强制类型转换符。()可能出现转换类型异常。
使用instanceof的判断, 来进行判断是否是同一类型的。
谈谈你对多态性的理解?
object类中定义的equals方法,
public boolean equals(object obj){
不仅可以放obj类,也可也放他子类的类。
所以这体现了多条。
}
抽象类、接口的使用肯定体现了多态性(抽象类、接口不能实例化)。
多态是运行时行为还是编译时行为?
编译时行为。从
面向对象编程。
类和类的成员,属性构造器。代码块 、内部类
第二条主线;封装继承多态
第三条:关键字的使用。
1,static的使用。
当我们在编写一个类的时,其实就是在描述其对象的属性和行为,而并非没有产生实质的对象,只有通过new关键字才会残生对象, ,我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每个中国人都共享中国国家名称,
static:静态的
2、static可以用来修饰:属性、方法、代码块、内部类
3.static:修饰属性:静态变量,修饰不了局部变量,
属性,是否使用使用static修饰:又分为:静态属性和非静态属性(实例变量,实例属性)。
实例变量:当我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值修改。
静态变量:我们创建了类的多个对象。多个对象共享同一个静态变量, 当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过的静态变量。、
3.2静态变量:
- 静态变量随着类的加载而加载。
- 静态变量的加载要早于对象的创建。
- 由于类只会加载一次,则静态变量只会在内存中存在一份:存在方法区的静态域中。
- 类变量、实例变量
类变量 yes no ;
对象 yes yes
内存解析:
栈:局部变量
堆:new出来的结构 :对象和数组。
方法区: 类的加载信息、静态域、常量池。
4.使用static修饰方法:静态方法
-
随着类的加载而加载,可以通过“类.静态方法”去调用、
-
静态方法中,只能调用静态的方法或属性。
非静态方法中,即可以调用非静态的。也可也调用静态的方法或属性。
5.static注意点:
在静态的方法内,不能使用this关键字、super关键字。只能使用静态的属性或方法,对于静态的属性,省略了类名。
静态方法的生命周期
开发中,如何确定一个属性是否要声明为static的?
这个属性是所有公用的、或者是不随着对象而改变的。 要弄成静态的。
操作静态属性的方法,通常设置为static。
工具类中的方法,习惯上声明为static,比如,Math,Arrays\collections
如math.“pi“.
-
Java.lang.object类的说明:
object类是所有Java类的父类。
如果在类的声明中为使用extend关键字指明器父类