day08继承封装

1:代码块是什么?代码块的分类和各自特点?

(1)用{}括起来的代码
(2)分类:
A:局部代码块
用于限定变量的生命周期,及早释放,提高内存利用率
B:构造代码块
把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块
C:静态代码块
对类的数据进行初始化,仅仅只执行一次

2:静态代码块,构造代码块,构造方法的执行流程?

静态代码块 > 构造代码块 > 构造方法

3:继承概述

类与类之间的衍生关系
继承可以看成是类与类之间的衍生关系 比如狗类是动物类,牧羊犬类又是狗类 于是我们可以说狗类继承了动物类,而牧羊犬类就继承了狗类
于是狗类就是动物类的子类(或派生类),动物类就是狗类的父类(或基类)
所以继承需要符合的关系是:is-a,父类更通用,子类更具体

4:继承的好处

A:提高了代码的复用性
B:提高了代码的维护性
C:让类与类产生了一个关系,是多态的前提

5:Java中继承的特点

  • 子类拥有父类除 private 以外的所有属性和方法
  • 子类可以拥有自己的属性和方法
  • 子类可以重写实现父类的方法
  • Java 中的继承是单继承,一个类只有一个父类

6:Java中继承的注意事项?以及我们什么时候使用继承?

A:子类不能继承父类的私有成员
B:子类不能继承父类的构造方法,但是可以通过super去访问
C:不要为了部分功能而去继承

A:继承体现的是:is a的关系
B:采用假设法

7:继承中的成员访问特点

A:成员变量
	在子类方法中访问一个变量
B:成员方法
	在测试类中通过子类对象去访问一个方法

在子类方法的局部范围找,有就使用
在子类的成员范围找,有就使用
在父类的成员范围找,有就使用
找不到,就报错

在子类中找,有就使用
在父类中找,有就使用
找不到,就报错

8:继承中构造方法的执行流程?假如父类没有无参构造方法,子类应该怎么办?

子类通过super去明确调用带参构造
子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造
让父类提供无参构造

9:面试题:

方法重写和方法重载的区别?方法重载能改变返回值类型吗?
Overload
Override

区别

this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用 

this super

10:继承案例练习

public class Animal {
    public int legNum;     //动物四肢的数量

    //类方法
    public void bark() {
        System.out.println("动物叫!");
    }
}
public class Dog extends Animal {
}
public class Test{
    public static void main(String[] args) {
        Dog a = new Dog();
        a.legNum = 4;
        a.bark();
    }
}
javac Test.java Animal.java Dog.java
java Test

11:猜数字小游戏练习

通过API学习并使用Math类的random()方法 
import java.util.Random;
import java.util.Scanner;
 
/*
题目:用代码模拟猜数字游戏
思路:
1. 首先需要产生一个随机数字,并且一旦产生不再变化。用Random的nextInt方法
2. 需要键盘输入,所以用到了Scanner
3. 获取键盘输入的数字,用Scanner当中的nextInt方法
4. 已经得到了两个数字,判断(if)一下
   如果太大了,提示太大了,并且重试;
   如果太小了,提示太小了,并且重试;
   如果猜中了,游戏结束。
5. 重试就是再来一次,循环次数不确定,用while(true)
 */
 
public class Game {
    public static void main(String[] args) {
        System.out.println("猜数字1-100之间的数字");
        Random r = new Random();
        int randomNum = r.nextInt(100) + 1; //[1,100]
        Scanner sr = new Scanner(System.in);
 
        while (true){
            System.out.print("请输入你猜测的数字:");
            int gameNum = sr.nextInt(); //键盘输入猜测的数字
 
            if(gameNum > randomNum){
                System.out.println("太大了,请重试。");
            }else if (gameNum < randomNum){
                System.out.println("太小了,请重试。");
            }else{
                System.out.println("恭喜您猜对了!");
                break;//如果猜中,不再重试
            }
        }
        System.out.println("游戏结束!");
    }
}

猜你喜欢

转载自blog.csdn.net/hezuijiudexiaobai/article/details/107576412