1:代码块是什么?代码块的分类和各自特点?
答:代码块是用{}括起来的代码;局部代码块:用来限定变量的生命周期,出现在main方法中
构造代码块:类中的成员为止,{代码块}用来给对象的数据进行初始化,每次执行构造方法之前,都要执行构造代码块
静态代码块:类中的成员位置,static{代码块}
作用:静态是和类有关系的,随着类的加载而加载,给类进行初始化,在类中只加载一次!
2:静态代码块,构造代码块,构造方法的执行流程?
答:静态代码块>构造代码块>构造方法3:继承概述
答:将多个类的共性内容,抽取到一个独立的类中,独立的类和多个类就产生一种关系:extends,继承4:继承的好处
答:1,提高了代码的复用性2,提高了代码的维护性
3,让类与类之间产生一种关系,继承是多态的前提
5:Java中继承的特点
答:1,只支持单继承,不支持多继承2,能够支持多层继承
6:Java中继承的注意事项?以及我们什么时候使用继承?
答:1,子类不能继承父类的私有成员(成员变量、成员方法)2,子类不能继承父类的构造方法,但是通过关键字super可以间接去访问
假设有俩个类A类和B类,如果A是类的一种或B类是A类的一种,就可以使用继承来实现。
7:继承中的成员访问特点
A:成员变量在子类方法中访问一个变量
B:成员方法
在测试类中通过子类对象去访问一个方法
答:A:子类中的成员变量和父类中的成员变量名称不一致,分别输出即可
一致:
a:先在子类中的成员方法的局部位置查找,有就输出
b:没有就访问子类的成员位置,有就输出
c:没有就访问父类的成员位置,有就输出
d:没有就会报错
B:this.成员方法;//访问的是本类的成员方法
super.成员方法;//访问的是父类的成员方法
8:继承中构造方法的执行流程?假如父类没有无参构造方法,子类应该怎么办?
答:父类进行初始化后,子类进行初始化,子类中的构造方法会默认访问父类中的无参构造;1,在父类中提供无参构造 2,使用super关键字去访问父类中的有参构造(写在第一句话)3,用this关键字去调用其他的构造方法,间接地访问父类的带参构造
9:面试题:
方法重写和方法重载的区别?方法重载能改变返回值类型吗?
Overload
Override
this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用。
答:方法重载:在同一个类中,方法的名字相同,但从参数的个数,参数的类型或者返回值不同,不能改变返回值类型
方法重写:是在继承中,子类重写了父类中的方法,方法名,参数类型,参数个数必须相同。
this表示本类,super表示父类
10:
使用继承去写一个猫狗案例
自己分析出他们的成员
成员变量
成员方法
等等
答:
/*
* 猫狗案例继承版
* 具体分析:
* 猫:
* 成员变量:name,age,color
* 构造方法
* 成员方法:set()/get()。。
* 特有功能:玩毛线..
* 狗:
* 成员变量:name,age,color
* 构造方法:无参有参
* 成员方法:set()/get()...
* 特有功能:看门
*
* 猫和狗种的共性内容抽取为一个独立的类:
* 动物类:
* 成员变量:name,age,color
构造方法
成员方法:set()/get()。。
狗继承动物类
猫继承动物类
* */
class Animal extends Object{
//成员变量
private String name ;
private int age ;
private String color ;
//无参构造...
public Animal() {
super();
}
public Animal(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
//提供set()/get()方法...
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void sleep(){
System.out.println("累了就要睡觉....");
}
}
//定义猫类
class Cat extends Animal{
public Cat() {
super();
}
public Cat(String name, int age, String color) {
super(name, age, color);
}
public void playGame(){
System.out.println("猫玩毛线....");
}
}
//定义狗类
class Dog extends Animal{
public Dog() {
super();
}
public Dog(String name, int age, String color) {
super(name, age, color);
}
public void lookDoor(){
System.out.println("狗看门....");
}
}
//测试类
public class ExtendsTest {
public static void main(String[] args) {
//测试猫类
Cat c = new Cat() ;
c.setName("Tom");
c.setAge(5);
c.setColor("黑白");
System.out.println(c.getName()+"---"+c.getAge()+"---"+c.getColor());
//有参构造
Cat c2 = new Cat("Tom", 3, "灰色") ;
System.out.println(c2.getName()+"---"+c2.getAge()+"---"+c2.getColor());
//狗类自己测试!
}
}
11:猜数字小游戏练习。
通过API学习并使用Math类的random()方法。
答:
/**
* 猜数字的小游戏:
* 分析:
* 1)使用Math先产生一个随机数,被猜的数据
* 2)使用键盘录入:录入一个数据,(我们自己要猜的数据)
* 3)拿键盘录入的数据和被猜的数据进行比较
* 大了
* 小了
* 中了
* 4)让猜的机会多走几次,死循环
* whilte(true){
* 中了之后,可以跳出循环!结束条件
* }
* */
//Math方法产生的随机数是double类型[0.0-1.0)之间
public static void main(String[] args) {
//1)产生一个随机数[0.0-1.0)
int number = (int) ((Math.random()*100)+1) ;
//System.out.println(number);
while(true){
//2)可以键盘录入一个数据
Scanner sc = new Scanner(System.in);
//录入并接收数据
System.out.println("请您输入一个数据(0-100):");
int guessNumber = sc.nextInt() ;
//做一个判断
if(guessNumber>number){
System.out.println("你要猜的数据"+guessNumber+"大了");
}else if(guessNumber<number){
System.out.println("你要猜的数据"+guessNumber+"小了");
}else{
System.out.println("恭喜您,猜中了");
break ;
}
}