[基础回顾] 抽象 类型转换 内部类

关于抽象方法

抽象方法不可以是静态的,不可以有方法体,不可以在普通类中定义,可以在接口中和抽象类中定义。

Abstract只可以修饰类和方法
修饰接口可以是public和默认

类型转换:

  1. 向上造型:
    父类引用指向子类对象
    能造型出来的类型:父类型,实现的接口
    能点出来什么,看引用的类型
  2. 强制类型转换
    成功的条件:(比如instanceof的判断结果)
    引用所指向的对象,就是该类型
    引用所指向的对象,实现了该接口
  3. 建议强制前,通过instanceof判断引用是否是instanceof返回的结果类型

Teahcer 和 Student 之间没有继承关系不能做强制类型转换。编译时正确, 但运行时错误。

成员内部类 :

1.类中套类--->内部类 通常只在外部类中创建, 
2.只服务于外部类,对外不具备可见性
3.可以直接访问外部类的成员,包括私有的
4.内部类中 有个隐式的引用,指向创建他的外部类,

语法:外部类.this.xxx

匿名内部类

1.如果想创建一个类的对象,并且对象只被创建一次,该类不必命名,称为匿名内部类
2.匿名内部类访问外部数据,那么数据必须需要final

interface Inter3{
     void show();
}
interface Inter2{
}
public class A {
    //创建了一个Inter2的一个子类,没有名字
    //为该子类创建了一个对象,引用叫做o1
    //大括号里面是 子类的类体
    Inter2 o1 = new Inter2() {
    };

    final int i =5;
    Inter3 o33 = new Inter3(){
        @Override
        public void show() {
            System.out.println(i);
        }
    };

    o33.show();
    //在一段程序中,需要创建一个类的对象
    //前面Inter2 ==> 用匿名内部类所实现的接口 或 所继承的父类类型 声明的引用
    //后面Inter2 ==> 匿名类所要实现的接口 或 继承的父类
    //匿名内部类--通常这个类: 需要实现接口 或者 继承某个类
    Inter2 o2 = new Doo();
    Inter2 o3 = new Doo();
    Inter2 o4 = new Doo();
}

class Doo implements Inter2{

}

内部类有独立的class吗?
答:有

面向对象总结

面向对象的三大特征:

  1. 封装
    1)类:封装的是对象的属性和行为
    2)方法:封装的是具体的逻辑功能实现
    3)访问修饰符:封装的是访问的权限
  2. 继承
    1)作用:避免代码的重复,有利于代码的重用
    2)父类:所有的子类所共有的属性和行为
    子类:子类所特有的属性和行为
    3)子类继承extends之后,子具有=子+父
    4)事物传递性,单继承,多实现
  3. 多态
    1)意义:行为的多态,对象的多态
    2)向上造型,强制类型转换,instanceof
    3)重写+重载(如println()..)
    重写+重载区别:都是多态的表现形式.

方法重写、重载的问题:
重写要求方法签名完全相同,返回值类型如果是基本类型或无返回值时必须一致。
重载要求方法名相同且参数列表必须不同,与返回值类型无关。

(单选题)已知A类在package A中, B类在package B中,且B类被声明为public,且有一个成员变量x被声明为 protected控制方式。C类也位于package A包中,且继承了B类。则以下说法正确的是( C)

A)A 类的实例不能访问到 B 类的实例
B)A 类的实例能够访问到 B 类一个实例的 x 成员
C)C 类的实例可以访问到 B 类一个实例的 x 成员
D)C 类的实例不能访问到 B 类的实例可以访问实例,不能访问成员

什么是类? 什么是对象? null和nullPointerException

调试:找出错误的出处:
eclipse中:
F5进入方法中 逐步调试
F6不进入方法 逐过程调试
F7跳出方法区
F8直接跳到下一个断点,没有断点强制结束
如何看变量值和表达式的值?

点赞