1、继承
总结:
a、子承父业、拿来主义。
b、所有子类公有的属性、方法提取出,放在父类中。
c、子类通过extends关键字继承父类,
子类可以直接使用父类中的公有属性跟方法。
d、子类与父类的关系
子父类继承关系必须为子类 is a 父类的关系。
e、子类私有属性、方法被写在子类中。
2、super关键字
回顾:this关键字三种用法:
this:本类的
1)、this.属性名
本类的属性
2)、this.方法名
本类的方法
3)、this()
本类的构造方法
super:父类的
super关键字使用在子类中。
1)、super.属性名
调用父类的属性
2)、super.方法名
调用父类的方法
注:子类可以直接使用父类的公有属性、方法
父类的就是子类的。
super.属性、super.方法可以被
this.属性、this.方法替换。
3)、super([参数列表])
调用父类的构造方法
注:a、子类对象创建,
必须先创建父类对象。
b、子类所有构造中第一行,
都会自动的默认的被添加上隐含的super()。
c、super([参数列表])必须添加在
子类构造的第一行。
d、this()、super()绝对不能同时出现
在同一个子类的构造中。
3、方法重写
1)、为什么方法需要重写?
因为写在父类中的公有方法,满足不了子类的业务需求。
则父类中方法就徒有虚名,没有具体的业务实现。
子类必须对父类中的没有具体业务实现的方法,
根据自己的业务需求,进行重写,
从而实现自己的业务功能。
2)、方法重写要求:
a、发生在子父类之间。
b、方法名相同、参数列表相同。
c、访问权限不能变小。
d、抛出异常不能变大。
e、返回值类型可以是本类或其子类。
3)、方法重写的调用
方法正常调用即可。
方法没有重写,调用父类的方法。
方法一旦重写,调用的是重写之后的方法。
4)、如何验证方法是否为重写方法。
在方法名上,添加注解 @Override
如果没有编译报错,说明该方法为重写方法
4、向上造型
回顾:基本类型转换
1)、自动类型转换
小 → 大
byte → short → int → long → float → double
↑
char
2)、强制类型转换
大 → 小
long l = 1000;
int i = (int)l;
short s = (short)i;
byte b = (byte)s;
System.out.println(b);//溢出
引用类型
1)、自动类型转换(类型提升、向上造型)
小 → 大
//step1:创建一个小类型
Dog dog = new Dog();
dog.name = "小黑";
//step2:小类型 → 大类型
//向上造型:将dog引用的类型从Dog 提升到 Animal
Animal animal = dog;
System.out.println(animal.name);
//step1、step2可合并为:
//父类的引用指向子类对象
Animal animal2 = new Dog();
//1)、能点出什么看类型
animal2.name = "小白";
animal2.eating();//eating不在Animal类中,在Dog类中
//2)、方法调用,看对象
animal2.noise();
2)、强制类型转换(以后再讲)
//创建大类型对象
Animal animal = new Animal();
//大类型 → 小类型
Dog dog = animal;//ClassCastException类型转换异常。
5、结论:
1)、能点出什么,看引用类型。
Animal animal = null;
animal.什么?
animal能点出Animal类中的属性、方法。
Dog dog = null;
dog.什
dog 能点出Animal父类及Dog本类中的属性、方法。
2)、方法的调用,看对象。
Animal animal1 = new Animal();
animal1.noise();//调用的是Animal中的noise()
Animal animal2 = new Dog();
animal2.noise();//调用的是Dog中的noise()
父类对象,只能调用父类中的方法。
子类对象,如果方法重写,调用的是重写之后的方法。
如果方法没重写,调用是父类的方法。
******************* pm ********************
1、java类的继承属于单继承、可传递
一个java实体类,只能继承一个父类。
2、访问权限
1)、package
package包,用于管理java源文件的。
使得相同功能的java类文件,管理在同一个功能包下。
包的划分及命名:
通常以功能划分
公司简称.功能包
包划分越细越好
2)、import
import导入外部类。
外部类:非java.lang包,非当前包下的其他类。
import 完整的包名.类名;
3)、public class
公共类,在任何地方都可以使用。
class没有public修饰的普通类,有局限性。
4)、访问修饰符
有4个,分别为:
public:公共的
所有类中都可以访问
protected:受保护的
本类、同包类、包外子类可以访问
default:默认的,没有default单词
本类、同包类可以访问
private:私有的
本类可以访问
| | 本类 | 同包类 | 包外子类| 其他类|
|:---------:|:-------:|:---------:|:-------:|
|public | √ | √ | √ | √|
|protected | √ | √ | √ | ×|
|default| √ | √| ×| ×|
|private| √| × | × | ×|
注:访问修饰符,可以用于修饰类中的
属性、方法(包括构造方法),
但构造方法一般只使用public才有意义。
5)、static关键字
static:静态的、共享的、属于类的
a、修饰成员变量
static 变量类型 变量名
b、修饰方法
static void 方法名
注:a、static修饰变量、方法
本类中,可以直接使用属性、方法名.
其他类中,可以直接使用类名.属性名、类名.方法名
b、static修饰的方法中,不能使用this关键字。
c、static修饰的方法中,只能使用static修饰的
成员变量。
c、static静态块
直接写在类体中的,由static{ }构成。
可以实现静态资源的提前加载,在类编译时完成。
静态资源:
图片、音乐、配置文件...
d、static静态导入(略)
import static java.lang.System.out;
System.out.println("静态块被执行....");
//out静态导入之后
out.println("out已经被静态导入了");
6)、final关键字
final:最终的、最后的、不可改变的。
a、final修饰成员变量
定义成员变量时,必须给予初始化。
final修饰局部变量
声明时,无需初始化,使用之前初始化即可。
一旦初始化,则不可再次赋值。
ps:因为final修饰的变量的值,一旦赋值不可改变。
所以final修饰的变量,都将是常量(所有字母大写)。
b、final修饰方法
不可以被重写。
c、final修饰类
不能被继承