java面试题 day01(封装、继承、多态、抽象、访问修饰符、goto、clone)

封装、继承、多态、抽象、访问修饰符、goto、clone

封装

把数据和操作数据的方法绑定起来,隐藏内部特性和行为,对数据的访问只能通过已定义的接口。
优点:
• 通过隐藏对象的属性来保护对象内部的状态。
• 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。
• 禁止对象之间的不良交互提高模块化。

继承

继承是从已有类得到继承信息创建新类的过程。
优点:
•提高代码复用性
• 让变化中的软件系统有了一定的延续性

多态

多态性是指允许不同子类型的对象对同一消息作出不同的响应。
编译时多态:方法重载
运行时多态:方法重写
优点:
•提高代码复用性

抽象

抽象是将一类对象的共同特征总结出来构造类的过程,只关心对象有哪些属性和行为,并不关注这些行为的细节是什么。
抽象和接口的区别
• 接口中的方法都是抽象的;而抽象类则可以包含抽象和非抽象的方法。
• 类可以实现很多个接口,但是只能继承一个抽象类
• 类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,抽象类可以不实现抽象类声明的所有方法,可以在不提供接口方法实现的情况下实现接口。
•接口中只能有常量final,抽象类可以有常量、变量
• 接口中的成员函数默认是 public 的。抽象类的成员函数可以是 private,
protected 或者是 public。
• 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含 main 方法的话是可以被调用的。

访问修饰符在这里插入图片描述

goto

goto 和 const,是 Java 中的保留字,在目前版本的 Java 中没有使用(在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)

& 和 && 的区别

两者都是and
&按位与:不管怎么都执行左右两边的程序
&&短路与:只有左边成立,才会执行右边的

clone

为什么要用clone?
一个对象的初始值来自另一个对象。

new一个对象和clone一个对象的区别?
new对象,先分配内存,在调用构造函数填充
clone对象,先分配内存,在从副本中复制

clone对象的使用?
【clone 方法执行的是浅拷贝(引用类型的复制地址)】
clone一个对象,则被clone的对象必要实现 Cloneable 接口,实现 clone方法。

 --implements Cloneable

 @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

深拷贝【引用类型是重新创建一个,而不是复制地址】:
如果想要深拷贝一个对象,这个对象必须要实现 Cloneable 接口,实现 clone
方法,并且在 clone 方法内部,把该对象引用的其他对象也要 clone 一份。

### Java 封装继承多态习题 #### 封装练习 为了更好地掌握封装的概念,可以尝试完成如下题目: 创建一个名为`Person`的类,在该类中定义私有属性如姓名(name),年龄(age)以及性别(gender)[^1]。为这些字段编写公共的方法用于设置(`setName`, `setAge`, `setGender`)和获取(`getName`, `getAge`, `getGender`)它们的值。 ```java public class Person { private String name; private int age; private char gender; public void setName(String name){ this.name = name; } public String getName(){ return this.name; } // Similar methods for setting and getting other properties... } ``` #### 继承练习 对于继承的理解可以通过设计两个类来实践:一个是基类叫做`Animal`,另一个是从它派生出来的子类叫作`Dog`或者其他的特定动物种类[^2]。在`Animal`里声明通用的行为比如吃(eat)、睡(sleep),而在具体的物种里面重写那些行为并添加特有的动作,像狗可能会汪汪叫(bark)。 ```java class Animal{ protected void eat(){ System.out.println("This animal is eating."); } } class Dog extends Animal{ @Override protected void eat(){ super.eat(); System.out.println("The dog likes to eat bones."); } public void bark(){ System.out.println("Woof woof!"); } } ``` #### 多态练习 利用上面提到的例子进一步探索多态特性。准备一组不同类型的动物实例(例如猫Cat, 鱼Fish),把它们都当作`Animal`处理,并观察当调用相同名称的方法时会发生什么情况——这正是运行时期间动态绑定的结果之一。 ```java List<Animal> animals = new ArrayList<>(); animals.add(new Cat()); animals.add(new Fish()); for (Animal a : animals){ a.eat(); // Each will perform its own version of 'eat' } ``` 通过上述三种方式的实际操作能够加深对Java核心概念的认识,同时也提高了编码技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值