可以导入一个具体的类:
import java.util.Arrays(正确的)
不能导入一个具体的包:
import java.util(错误的)
导入这个包下面的所有的类(*为通配符):
java处理的时候,需要谁才会拿谁;C里面是把所有的类都拿进来
import java.util.*;
静态导入:
包名必须是小写字母
当成员变量不加任何的访问修饰限定词的时候,默认包访问权限,即只能同一个包里面的才能访问。包访问权限没有关键字。
面向对象的基本特征:
封装:不必要公开的数据成员,使用private关键字(安全性)
继承:子类/派生类 继承自 父类/基类/超类
①java中一个子类只能继承自一个父类
②子类构造的同时,要帮助父类构造
super(); //调用父类的构造方法 |
super.func(); |
super.data; |
super()不能出现在静态方法中,是父类对象的引用,依赖对象;static不依赖对象
同名的情况下,子类优先访问自己的对象,如果指定了,就访问指定的。
private: | 类内部可以访问 |
默认(包访问权限): | 类内部可以访问,同一个包的类可以访问 |
protected: | 类内部可以访问,同一个包的类可以访问,不同包的子类可以访问 |
public: | 都可以访问 |
一个类被final修饰,表示不可以被继承
1.向上转型:父类引用子类实例,子类对象转成父类对象
Animal animal=new Dog("haha",3);
①直接赋值
②方法传参
③方法返回
2.向下转型:不是很安全,父类对象转成子类对象
前提是animal本身是dog
Animal animal= new Dog("haha",2);
Dog dog=(Dog)animal;
//下面这种写法更安全
Animal animal= new Bird("haha",2);
if(animal instance of Bird){
Bird bird=(Bird)animal;
}
1.运行时多态—动态绑定(重写实现):实现子类的方法
编译的时候不能够确定到底调用谁(父类还是子类)的方法,运行的时候才知道,是子类对父类方法的覆盖实现多态
方法名,返回值,参数类型和个数完全相同
前提:①父类引用子类对象 ②通过父类引用调用父类和子类 同名的覆盖方法(即重写)
重写:①方法名相同 ②参数列表相同(个数+类型) ③返回值相同 ④只发生在父子类中
不能重写的类型:
①静态方法,被static修饰
②子类的访问修饰限定,要大于等于父类的访问修饰限定(比如不能是private)
③private不能重写
④被final修饰的方法不能重写
重写的返回值可以不同:发生了协变类型(父类和子类的返回类型不一样)但最好相同,也算重写
父类引用只能引用父类自己的成员,不能访问子类的成员。
2.编译时多态—静态绑定(重载实现):
方法名相同,参数的类型和个数不同,是在一个类中
根据给的参数推导出调用的是哪个函数,编译的时候就知道调用的哪个函数了,利用重载实现多态