一、
接口:
是一种引用数据类型
由interface定义
只能包含常量和抽象方法
不能被实例化
public class InterfaceDemo {
public static void main(String[] args) {
//Inter5 o1 = new Inter5(); //编译错误,接口不能被实例化
Inter5 o2 = new Doo();
Inter4 o3 = new Doo();
}
}
interface Inter4{
void show();
}
interface Inter5 extends Inter4{//接口可以继承接口
void test();
}
class Doo implements Inter5{
public void test(){}
public void show(){}
}
接口需要被实现/继承,实现类/派生类必须重写接口中的所有抽象方法
一个类可以实现多个接口,用逗号分隔,若又继承又实现时,应先继承后实现
接口可以继承接口
interface Inter{
//接口中成员的访问权限,默认就是public的,也只能是public的
public static final int NUM = 5;
public abstract void show();
int COUNT = 5;
void test();
//int number; //编译错误,常量必须声明同时初始化
//void say(){ } //编译错误,抽象方法不能有方法体
}
二、多态:多种形态
1.意义:
同一个对象被造型为不同的类型时,有不同的功能,所有对象都是多态的
同一类型的引用指向不同的对象时,有不同的实现,所有抽象方法都是多态的
2.向上造型/自动类型转换:
超类型的引用指向派生类的对象
能点出来什么,看引用的类型
能向上造型成为的类型有:超类和所实现的接口
3.强制转换的条件:
引用所指向的对象,就是该类型
引用所指向的对象,实现了该接口或继承了该类public class Test {
public static void main(String[] args) {
Aoo o = new Boo();
Boo o1 = (Boo)o;
Inter o2 = (Inter)o;
//Coo o3 = (Coo)o; //运行时会发生ClassCastException类型转换异常
if(o instanceof Coo){ //判断o是否是Coo类型(与强转成功条件完全匹配)
Coo o4 = (Coo)o;
}else{
System.out.println("o不是Coo类型");
}
}
}
interface Inter{ }
class Aoo{ }
class Boo extends Aoo implements Inter{ }
class Coo extends Aoo{ }
4、接口的好处:
复用性好、扩展性好、维护性好
三、栈,堆,方法区
堆:存储的是new出来的对象(包括实例变量、数组的元素)
栈:存储正在调用的方法中的局部变量(包括方法的参数)
调用方法时会在栈中为该方法分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参
数),方法调用结束时,栈帧被自动清除,局部变量一并被清除
方法区:
存储.class 字节码文件(包括静态变量、所有方法) 方法只有一份,通过this来区分具体的调用对象 四、面向对象三大特征 封装: 类:封装的是对象的属性和行为 方法:封装的是具体的业务逻辑功能实现 访问控制修饰符:封装的是具体的访问权限class Aoo {//所有派生类所共有的属性和行为
String name;//封装的是对象的属性和行为
void show(){//方法:封装的是具体的业务逻辑功能实现
}
}
class Boo extends Aoo{
int a;//派生类所特有的属性和行为
public void Name(){
System.out.println(name);//代码复用
}
}
继承:
作用:代码复用
超类:所有派生类所共有的属性和行为
接口:部分派生类所共有的属性和行为
派生类:派生类所特有的属性和行为
单一继承、多接口实现,具有传递性
多态:
所有对象都是多态的----------------通过向上造型来体现的
所有抽象方法都是多态的----------通过方法的重写来体现的
向上造型、强制类型转换、instanceof判断
五、String:
java.lang.String使用final修饰,不能被继承
String的底层封装的是一个字符数组
String在内存中采用Unicode编码格式,每个字符占用两个字节的空间
字符串一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值(指向新的对象)


