关于抽象方法
抽象方法不可以是静态的,不可以有方法体,不可以在普通类中定义,可以在接口中和抽象类中定义。
Abstract只可以修饰类和方法
修饰接口可以是public和默认
类型转换:
- 向上造型:
父类引用指向子类对象
能造型出来的类型:父类型,实现的接口
能点出来什么,看引用的类型 - 强制类型转换
成功的条件:(比如instanceof的判断结果)
引用所指向的对象,就是该类型
引用所指向的对象,实现了该接口 - 建议强制前,通过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)类:封装的是对象的属性和行为
2)方法:封装的是具体的逻辑功能实现
3)访问修饰符:封装的是访问的权限 - 继承
1)作用:避免代码的重复,有利于代码的重用
2)父类:所有的子类所共有的属性和行为
子类:子类所特有的属性和行为
3)子类继承extends之后,子具有=子+父
4)事物传递性,单继承,多实现 - 多态
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直接跳到下一个断点,没有断点强制结束
如何看变量值和表达式的值?