一.代码块
1.局部代码块(想到方法)
书写位置:方法中
作用:限制作用域
2.构造代码块
书写位置:类中 方法外
代码的执行顺序:
1.系统调用的
2.只要创建对象 就会调用
3.构造代码块 在构造方法之前被调用
作用:当你有些方法 需要每一个对象都调用的时候
可以将这个方法 在构造代码块中调用(不常用)
3.静态代码块
使用关键词 static 修饰代码块
书写位置:类中 方法外
调用顺序:
1.随着类的加载而加载
2.只加载一次
3.在构造代码块之前执行
应用场景:
加载驱动(加载数据库的驱动)
4.同步代码块(多线程部分)
二.继承
面向对象的三大特征之一。
1.继承可以传递;
2.继承的是属性和行为(不是全部继承);
3.建立了类与类之间的关系。
继承的好处:
1.减少代码量;
2.提高工作效率;
3.增强了类与类之间的关系(让类和类的关系更加紧密)。
继承的弊端:违反了低耦合(低耦合:希望类与类之间减少联系)
使用继承一定要符合逻辑
class Animal{
String name;
String color;
//介绍自己的方法
public void sayHi() {
System.out.println(name + ""+ color);
}
}
class Cat extends Animal{
public void speak(){
System.out.println("喵喵喵");
}
}
class Dog extends Animal{
public void speak(){
System.out.println("汪汪汪");
}
}
java中 只允许 但继承(通过接口实现多继承)
java中 还允许 多层继承(继承链)A->B->C
当你只使用共有方法和属性 使用哪个类对象?
一般选择 使用继承链 最顶端的类
当你只使用特有方法和属性 使用哪个类对象?
一般选择 使用继承链 最末端的类
注意:构造方法是不能继承的
当创建子类对象的时候 为了保证继承的完整性
不管 在创建子类对象的时候 使用的是 无参的构造方法还是有参)
系统会默认帮你调用 父类中的 无参构造方法
class Son extends Father{
public Son() {
//系统帮你在 构造方法的第一行 写了一句代码
//如果你不写系统会默认帮你加上
super();//调用父类的构造方法
System.out.println("无参");
}
public Son(String name) {
super();//调用父类的构造方法
System.out.println("有参");
}
}
三.super关键字
super 和 this
super 在子类中代表是 父类的对象
this 关键字 可以调用子类的属性 和 方法
当子类中没有这个属性 或方法的时候 就去父类中寻找
找到就用 没有找到就报错
四.重载
方法重载(overload)(在一个类中)
方法的重写(Override)(前提 至少两个类 有继承关系)
作用 相当于 对 父类的该方法 进行升级
跟父类的方法 完全一致
书写一个类 都写什么方法?
有参 无参构造方法 set/get 方法
重写toString方法输出属性
public String toString() {
//调用的是父类方法
//打印出来默认 全类名@16进制hashcode码
return super.toString();
}