首页 > 编程语言 >初学Java基础Day18---面相对象之抽象类及其抽象方法,接口的使用及其面试题

初学Java基础Day18---面相对象之抽象类及其抽象方法,接口的使用及其面试题

时间:2024-10-13 22:20:18浏览次数:10  
标签:面试题 Java String 接口 --- 抽象 抽象类 方法 public

一,抽象类及其抽象方法的使用

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

相关文章

  • OpenAI 推出 Meta-Prompt 工具,如何在 AI 时代掌握提示词的艺术
    OpenAI推出Meta-Prompt工具,如何在AI时代掌握提示词的艺术......
  • 2024-2025-1 202421310 《计算机基础与程序设计》第3周学习总结
    学期(如2024-2025-1)学号(如:20241300)《计算机基础与程序设计》第X周学习总结作业信息|这个作业属于哪个课程|https://www.cnblogs.com/rocedu/p/9577842.html|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03|这个作业的目标|数字分类与计数法位......
  • 面向对象程序设计-实验1
    任务一: #include<iostream>#include<string>#include<vector>#include<algorithm>usingnamespacestd;template<typenameT>voidoutput(constT&c);voidtest1();voidtest2();voidtest3();intmain(){cout&l......
  • 2024-2025-1 20241329 《计算机基础与程序设计》第三周学习总结
    作业信息作业归属课程:https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03作业目标:数字分类与计数法、位置计数法、进制转换、模拟数据与数字数据、压缩与解压、数字化、信息安全作业正文:https://www.cnblo......
  • Java面试题———MyBatis篇
    目录1、Mybatis中#{}和${}的区别2、当实体类中的属性名和表中的字段名不一样,怎么办3、MyBatis动态SQL了解吗4、ResultType和ResultMap有什么区别1、Mybatis中#{}和${}的区别在Mybatis中#{}和${}都可以用于在sql语句中拼接参数,但是在使用方面有很多的区别1、处理方式......
  • Java面试题———Spring篇
    目录1、谈谈你对SpringIOC的理解2、Spring中有哪些依赖注入方式3、你用过哪些Spring注解4、SpringBean的作用域有几种5、Spring中的bean线程安全吗6、谈谈你对SpringAOP的理解7、AOP的代理有几种方式8、Spring的通知类型有哪些9、了解Spring的事务管理吗10、Spring......
  • 电子电气架构---汽车OEM敏捷式集成方案简介
    我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。无......
  • 【java面经thinking】一
    目录类加载过程加载:连接初始化GC回收机制(垃圾回收)区域判断对象是否存活回收机制HashMap类加载器加载标识加载机制缓存自定义加载器:JVM内存结构常量池string设置成final按下网址发生类加载过程分为加载,连接和初始化的过程。加载:将.class文件的二进制字节......
  • 0xGame2024-week1-crypto
    CryptoCaesarCipher密文:0yHbnf{Uif_Cfhjoojoh_Pg_Dszqup}提示:凯撒加密。改成-1就好了RSA_EasyfromCrypto.Util.numberimportbytes_to_long,getPrimefromhashlibimportmd5fromrandomimportrandintfromgmpy2importinvert,gcd#HashFunction:defMD5(m......
  • Python包导入报错:ValueError: attempted relative import beyond top-level package
    Python包导入报错:ValueError:attemptedrelativeimportbeyondtop-levelpackage前置知识:python-m命令python-m命令用于以模块的方式运行Python代码,而不是直接执行脚本文件。它为执行Python代码提供了一种更加灵活和标准化的方式,特别适用于包和模块。python-m的工作原......