JavaSE学习总结(六)面向对象(中)代码块/继承/this和super/父类没有无参构造子类怎么办/方法重写/重写和重载的区别/final关键字/多态/多态成员访问特点/向上转型向下转型/孔子装爹

面向对象(中)

一、代码块

(一)代码块概述

在Java中,使用{}括起来的代码被称为代码块。

(二)代码块分类

根据其位置和声明的不同,可以分为局部代码块、构造代码块、静态代码块和同步代码块(多线程部分讲解)。

(三)常见代码块的应用

1.局部代码块

在方法中出现;限定变量生命周期,及早释放,提高内存利用率

2.构造代码块

在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造方法都执行,并且在构造方法前执行

3.静态代码块

在类中方法外出现,并加上static修饰;静态代码块用于给类进行初始化,随着类的加载而加载,优先于构造代码块和局部代码块执行,且由于类只加载了一次,因此静态代码块只执行一次静态代码块中只能访问静态变量

案例演示1

public class MyTest1 {
   
    public static void main(String[] args) {
   
        //局部代码块:定义在方法中的代码块
        int b=100;
        {
   
            //局部代码块,可以尽早的释放空间和资源
            int a=200;
            System.out.println("这是一个局部代码块");
            System.out.println(a);
            System.out.println(b);
        }
        //System.out.println(a);//报错!当局部代码块的右括号结束后,括号内的资源全部释放,因此变量a不再存在
        System.out.println(b);
    }
}

在这里插入图片描述
案例演示2

class Student{
   
    static {
   
        System.out.println("Student 静态代码块"); //3
    }

    {
   
        System.out.println("Student 构造代码块"); //4 6
    }

    public Student() {
   
        System.out.println("Student 构造方法"); //5 7
    }
}
class StudentDemo {
   
    static {
   
        System.out.println("StudentDemo的静态代码块");//1
    }

    public static void main(String[] args) {
   
        System.out.println("我是main方法");//2
        Student s1 = new Student();
        Student s2 = new Student();
    }
}

在这里插入图片描述

二、继承

(一)继承概述

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

(二)继承格式

通过extends关键字可以实现类与类的继承

class 子类名 extends 父类名 {
   }  

单独的这个类称为父类,基类或者超类;继承该类的这多个类可以称为子类或者派生类。
那么什么时候可以使用继承呢?
继承其实体现的是一种关系:“is a” .
采用假设法:如果有两个类A、B。只要他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。

案例演示1

public class MyTest {
   
    public static void main(String[] args) {
   
        Zi zi = new Zi();
        //子类可以继承父类的成员变量和成员方法,并且可以使用
        System.out.println(zi.num);
        zi.show();
    }
}
class Fu{
   
    int num=100;
    public void show(){
   
        System.out.println("这是一个show方法");
    }
}
class Zi extends Fu{
   

}

案例演示2

public class MyTest2 {
   
    public static void main(String[] args) {
   
        Cat cat = new Cat();
        cat.name = "汤姆";
        cat.age = 1;
        System.out.println(cat.name);
        System.out.println(cat.age);
        cat.eat();
        cat.sleep();
        cat.catchMouse();
        System.out.println("----------------------");
        Dog dog = new Dog();
        dog.name = "旺财";
        dog.age = 10;
        System.out.println(dog.name);
        System.out.println(dog.age);
        dog.eat();
        dog.sleep();
        dog.lookDoor();
    }
}
class Animal {
   
    String name;
    int age;
    public void eat() {
   
        System.out.println("吃饭");
    }
    public void sleep() {
   
        System.out.println("睡觉");
    }
}
//猫和狗都有名字、年龄、吃饭、睡觉等共性,如果在每个类中都写一次就会增加重复代码
//因此我们可以讲这些共性抽取到动物类中,而猫和狗类继承这个动物类,猫和狗类中只需要写自己的特性代码
class Cat extends Animal{
   
    public void catchMouse(){
   
        System.out.println("抓老鼠");
    }
}
class Dog extends Animal{
   
    public void lookDoor() {
   
        System.out.println("看门");
    }
}

在这里插入图片描述

(三)继承的优点和弊端

1.优点:
  • 提高了代码的复用性
  • 提高了代码的维护性
  • 让类与类之间产生了关系,继承是多态的前提
2.弊端:
  • 类的耦合性增强了

开发的原则:高内聚,低耦合。
耦合:类与类之间关联的程度(一个类要完成某个功能需要依赖其他类的程度)
内聚:一个类单独完成某个功能的能力

(四)Java中类的继承特点

1.Java只支持单继承,不支持多继承

有些语言是支持多继承,例如C++,格式:extends 类1,类2,…

2.Java支持多层继承(可以使用多层继承关系中上几层的类的非私有成员)

Object类是所有类的顶层父类,所有类都是直接或间接地继承Object类

(五)继承的注意事项

1.子类只能继承父类所有非私有的成员(成员方法和成员变量)
2.子类不能继承父类的构造方法

但是可以通过super(下边讲)关键字去访问父类构造方法。

3.不要为了部分功能而去继承

会增加耦合性,根据实际情况,如果共同属性和行为不多就不建议继承。

案例演示

public class MyTest3{
   
    public static void main(String
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值