代码块
1.局部代码块
书写位置:方法中
作用:限制作用域
2.构造代码块
书写位置:类中 方法外
代码的执行顺序:
1.系统调用
2.只要创建对象 就会调用
3.构建代码块在构造方法之前被调用
作用:当你有方法 需要每一个对象都调用的时候
可以将这个方法在构造代码块中调用(不调用)
3.静态代码块
使用关键词 static 修饰的代码块
位置:类中 方法外
调用顺序:
1.随着类的加载而加载
2.只加载一次
3.在构造代码块之前执行
应用场景:加载驱动(加载数据库的驱动--一个类)
public class Demo01 {
public static void main(String[] args) {
//fun1();
//测试 构造代码块
Person p1=new Person();
p1.name="张三";
p1.sayHi();
Person p2=new Person("李四",20);
p2.sayHi();
}
private static void fun1() {
{
//局部代码块 限制变量的作用域
int num=10;
System.out.println(num);
}
}
}
//暴力调试法
//小黄鸭调试法(逻辑调试)
class Person{
String name;
int age;
// 无参 和 有参的构造方法
public Person() {
System.out.println("我是无参的");
}
public Person(String name,int age) {
this.name=name;
this.age=age;
System.out.println("我是有参的");
}
public void sayHi() {
System.out.println(name+""+age);
}
//构造代码块
public void eat() {
System.out.println("人--吃饭");
}
{
System.out.println("我是 构造代码块");
}
//静态代码块
static {
System.out.println("我是 静态代码块");
}
}
继承
1.可以进行传递
2.继承的是属性和行为(不是全部)
3.继承 建立 类和类之间的关系(让类和类的关系更加紧密)
继承好处:
1.减少代码量(代码复用性)
2.提高工作效率
3.增强了类与类之间的关系
继承弊端:
提高内聚:希望一个类中方法与方法之间联系加强
降低耦合:希望类与类之间减少联系
继承违反低耦合
继承:一定要符合逻辑
关键字 extends 父类名字
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
当你想只使用共有方法和属性使用哪个类的对象?
一般选择使用继承链最顶端的类
当你想使用特有方法和属性使用哪个类的对象?
一般选择使用继承链最末端的类
如果一个类没有写继承
那么这个类 默认继承 Object类
public class Demo04 {
public static void main(String[] args) {
DemoA a=new DemoA();
//当我直接打印对象的时候
//相当于调用 Object类中 toString方法
System.out.println(a.toString());
}
}
class DemoA{
String name;
public void sayHi() {
System.out.println(name);
}
}
class DemoB extends DemoA{
}
class DemoC extends DemoB{
String sex;
}
继承中的构造方法
注意:构造方法是不能继承的
当创建子类对象的时候 为了保证继承的完整性
(不管你在创建子类对象的时候使用的是无参还是有参构造)
系统会默认帮你调用父类中的无参的构造方法
super和this
super在子类中代表是父类的对象
this 在子类可以调用子类的属性和方法
(当子类中没有这个属性或者方法的时候 就去父类中寻找)
找到就用 没找到就报错
方法重写
方法重载(Overload)(在一个类中进行)
方法重写(Override)(前提:至少两个类 并且还有继承关系)
方法重写 作用:相当于对父类的该方法进行升级
重写:跟父类的方法完全一致
书写一个类 都写什么方法?
有参 无参构造方法 set/get方法
重写toString方法输出属性
class IOS7{
public void siri(){
System.out.println("说英文");
}
}
class IOS8 extends IOS7{
//注释:标识这个方法是重写父类
@Override
public void siri() {
super.siri();
System.out.println("说中文");
}
//这个方法 一般用来 数组本类中的属性
@Override
public String toString() {
//调用的父类的方法
//打印出来 全类名@16进制的hashcode码
return "name"+name;
}
}
关键字 final
1.修饰方法 方法不能被重写
2.修饰类 类不能被继承
3.修饰变量 变量不能被修改
final 修饰 引用数据类型
不能进行重新指向(地址不能修改了)
对象中的属性不会影响修改