天天看点

java中内部类 、object类 、final关键字、修饰符、多态

继承两种方式:

Has—a: 类中有另一个类的应用

Is—a:extends

多态

1. 基本数据类型:自动转换, 强制转换

2. 引用数据类型:向上转型,向下转型(必须先向上转型)

A. 向上转型:子类的地址赋值给父类

注意:父类只能使用自己类中的方法,不能使用子类中的方法。如果子类重写了父类方法,则父类调用的是子类重写后的方法。-这才是向上转型的价值。

好处:

1. 扩大参数、属性范围;

2. 若父类是一接口,通过这种方法获得自身对象。:接口作为类的参数

B. 向下转型: 先向上转型后才能向下转型。

错误:Student p=new Person ():

//具体被调用的方法

Publicvoid play(Person p): Person是一个接口或者抽象类

具体调用流程:

Person p=new Studen(); //向上转型

Play(p);

//具体play方法

public void play(Person p)

{

//此处需要调用student中的方法,必须向下转型

if(Student instanceOf Person){

Student s=(Student)p;

p.work();

}

}

final关键字

  1. 修饰属性—–>常量;
  2. 修饰方法—–>最终方法,不能被子类重写 但可以被子类调用;
  3. 修饰类———>最终类,不能被继承。

修饰符+访问修饰符

修饰符:abstract final static

访问修饰符:private public protected default

普通类:

A. 访问修饰符:public 默认;

B. 修饰符:abstract ,fina;

属性:

访问修饰符:4种;

修饰符:static、final;

方法:

访问修饰符:4种;

修饰符:abstract final static;

接口:

访问修饰符:public 默认(不写);

接口中方法的创建:

访问修饰符、修饰符二者全都出现或者全部不出现或者二者出现其一。

Object类

1.hashcode():把对象的地址转换成哈希吗值(整形值);

2. toString():打印对象时的地址的字符串。一般子类都要重写此方法。

3. getClass():得到运行时类;

4. equals():即比较地址也比较内容,在子类中需要重写。

5. clone():创建返回对象副本;

6.finalize():垃圾回收.

内部类

顾名思义,在一个类的内部有定义了一个类。

种类:成员内部类,静态内部类,局部内部类,匿名内部类。

A. 成员内部类:

类之内方法之外定义的内部类。可以将其理解为一种成员,故其访问修饰符是4种。

a.获取内部类:

1. 外部类外部类对象=new 外部类;

2. 外部类.内部类 内部类对象=外部类对象.new 内部类;

Person.Heart heart=person.new Heart();

b.获取匿名内部类

1.在外部类中定义一个方法getInstance()返回内部类实例

2.直接使用外部类实例去调用getInstance得到内部类实例

Person.Heart heart1=person1.getInstance()

注意:同名属性使用实例:

System.out.println(“局部变量name:”+name);

System.out.println(“内部类属性:”+this.name);

System.out.println(“外部类属性:”+Person.this.name);//Person.this:外部类对象

B. 静态内部类:

使用static修饰的内部类

注意:

静态内部类不能使用非静态的外部属性和方法

创建对象方法:不依赖外部类

1. Person.Heart heart1=new Person.Heart () //直接new

2.也可以通过定义getInstance的形式创建。

C. 局部内部类:

定义在方法中的内部类。

注意:

1. 可以使用外部类的属性和方法,包括私有属性。

2. 如果要使用方法中的局部变量,则该变量必须是final,因为内部类不能在使用完外部类的变量后将其销毁,即当方法中的变量被回收后导致局部内部类引用时找不到。