包
好处
①分类管理众多类
java自带的类和我们自定义的类
②避免类的重名
不同的包里面类可以同名
③可以控制某些类或成员的可见范围
主要是通过修饰符来控制
**命名:**全小写,用 . 隔开,公司域名的倒序,见名知意
使用其他包类:
同包可以直接用,不同的包需要用import导入包的全类名
①导包
在类的上方通过import导入包的全类名
eg:import java.util.Scanner;
②引用
导包成功后,在当前java文件中,导入的类可以直接使用
继承
面对对象的三大基本特征:抽象、继承、多态,封装
继承是多态 的前提!!
好处:
提高复用性
语法:
在子类类名后+ extends +父类类名
①成员变量
1.子类可以继承父类所有的成员变量,但是有一些成员变量,子类没有访问权限
子类不具有访问权限可以通过父类的get/set去访问
2.父类和子类可以有重名属性,
调用重名属性采用就近原则
如果想指定使用父类的重名属性可以采用
super.属性 从继承里面找,跳过当前自己的属性(只能在子类内部)
3.父类对象和子类对象没有任何关系
②成员方法
1.子类可以继承父类的所有方法,但是权限可以控制子类不能调用父类的方法
如果非要调用,可以在父类中增加一个中间方法(没有意义)
```java
private void run(){
System.out.println("hrllo");
}
public void add(){//中间方法
run();
}
```
2.如果方法重复--->方法重写(覆盖)
条件:
a.父子类,
b.方法名相同
c.参数列表相同(个数,类型,顺序)
d.返回值相同
基本数据类型:
必须一致
引用数据类型:
父类的返回值类型必须大于等于子类的返回值类型(原因:多态)
e.权限修饰符相同
子类的权限修饰符必须大于等于父类的权限修饰符的范围
**private的父类方法不能被子类重写**
调用:
如果想调用父类的方法
super . 方法名 (只能在子类内部)
```java
public void run(){
System.out.println("这是一个可爱的小狗在尽情的奔跑!");
}
public void add(){
this.run(); //调用子类的方法
super.run(); //调用父类的方法
}
```
③构造方法
子类不会继承父类的构造器,但是在实例化子类对象的时候,会默认条用父类的构造器
因为每个构造器**首行**都会默认存在一行代码 ***super();***--->默认调用父类的无参构造器
public Student(){
super();//调用父类的无参构造器
}
public Student(String name,int age){
super(name,age);//调用父类的有参构造器
}
④Java的单继承
Java中一个类只有一个父类(直接继承不可以,但是可以间接继承)
一个类如果没有显示的继承父类,南无该类的父类是object
object类是所有类的默认父类,所有Java对象都会间接的继承object类的内容
⑤super
父类空间优于子类对象产生
***父类空间不等于父类对象***
this: 当前对象
super:当前对象内的父类空间
⑥final
修饰符--->修饰类。变量。方法
1.修饰类的时候
该类不能被继承
2.修饰变量的时候
该变量会变成常量,值不能再被修改
3.修饰方法的时候
该方法不允许重写
⑦protected 受保护的
本类 本包 非本包子类 非本包非子类
√ √ √ ×
范围大到小: public-->protected-->缺省的----->private