继承封装
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关键字分别代表什么?以及他们各自的使用场景和作用
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("游戏结束!");
}
}