一,抽象类及其抽象方法的使用
1.抽象方法:
没有代码块,使用abstract修饰的方法,交给非抽象子类去实现
注意:抽象方法必须在抽象类中。
2.抽象类:
使用abstract修饰
3.代码实现:
//抽象类
public abstract class Person{
//抽象方法
public abstract void eat();
}
//在非抽象的子类中去实现父类的抽象方法
public class Japanese extends Person{
private String yearNum;
public Japanese() {
}
public Japanese(String name, char sex, int age, String yearNum) {
super(name, sex, age);
this.yearNum = yearNum;
}
public String getYearNum() {
return yearNum;
}
public void setYearNum(String yearNum) {
this.yearNum = yearNum;
}
@Override
public void eat() {
System.out.println(super.getName() + "吃马赛克");
}
}
注意:子类继承抽象父类,除了在子类中实现父类抽象方法,也可以让子类也变成抽象类,此时可以不用实现父类的抽象方法如:
public abstract class Chinese extends Person{
private String id;
public Chinese() {
}
public Chinese(String name, char sex, int age, String id) {
super(name, sex, age);
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public abstract void hobbies();
}
public class GuangDong extends Chinese{
public GuangDong() {
}
//这个有参构造需要自己添加,因为子类没有自己的属性系统无法添加
public GuangDong(String name, char sex, int age, String id) {
super(name, sex, age, id);
}
@Override
public void hobbies() {
System.out.println(super.getName() + "喜欢做生意、收租");
}
@Override
public void eat() {
System.out.println(super.getName() + "吃肠粉、潮汕牛肉火锅");
}
}
二,抽象类及其抽象方法的深入
面试题:
1.抽象类可以有构造方法
2.抽象类中不止有抽象方法,可以有属性,构造方法,成员方法,静态方法
3.抽象类中可以没有抽象方法,但是这样毫无意义(因为某些原因,将方法设置成抽象的,但是抽象方法必须在抽象类中,这时才会使用到抽象类)。
4.什么原因将方法设计成抽象的?
找个方法应该在该类中,但是该方法不太好实现,就将该方法设计成抽象的,交给非抽象的子类去实现
5.如果父类是抽象类,则子类必须实现父类的抽象方法?
不一定,如果子类是抽象类,可以不实现父类的抽象方法
6.可以使用new关键字来创建抽象类?
不可以,创建的是匿名子类的对象
//面试题6理解:
//new一个抽象类可以这样:
Person p=new Person();
@Override
public void eat(){
System.out.println("xxxx");
}
p.eat();
三,接口的使用
理解:
1.接口是一个特殊的抽象类;
2.JDK1.8之前,接口中只能有抽象方法及静态常量;JDK1.8开始,接口中允许使用抽象方法,静态常量,静态方法,默认方法。
注意:
1.接口中的抽象方法默认添加public abstract(经验:一般把abstract去掉);
2.接口中的属性默认添加 public static final;
3.接口中的默认方法 默添加public
应用场景:
接口相当于制定规则(标准),再让实现类去实现
代码实现:
//需求:设计学生管理系统项目接口
//分析:学生管理系统管理一个一个的学生对象
// 管理--数据的操作-增,删,查,改
//学生管理系统的接口
public interface IstudentManagerSystem{
//静态常量--默认使用public static final修饰
int NAME =1;
int SEX =1;
//抽象方法---默认使用public static修饰
public void add(Student stu);
}
四,接口的深入
面试题:
1.一个类可以实现多个接口
public class A implements I1,I2{
@Override
public void i2Method(){
}
@Override
public void i1Method(){
}
}
2.一个接口不可以实现(implement)多个接口,但是一个接口可以继承(extends) 多个接口
3.接口里面的方法不一定都是抽象的?
JDK1.8之前,接口中只能有抽象方法及静态常量;JDK1.8之后接口中除了有抽象方法和静态常量,还可以有静态方法和默认方法
4.接口是解决了类单继承问题吗?
是的,因为一个类可以实现很多接口
5.一个类可以继承一个类并同时实现多个接口
public class A extends B implements I1,I2,I3{
}
6,接口可以new对象?
不可以,new对象创建的是匿名实现类的对象(new 的是 Test01$1() 的对象,new出来的内存地址0x001赋值给接口的引用i1);
标签:面试题,Java,String,接口,---,抽象,抽象类,方法,public From: https://blog.csdn.net/2401_87491344/article/details/142905596