面试题汇总 21 -30

面试题汇总01-10
面试题汇总11-20

21、写 clone()方法时,通常都有一行代码,是什么

关于 clone 的介绍

示例


@Data
public class Person implements Cloneable {
    private String name;
    private Integer age;
    private Address address;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
 
@Test
public void testShallowCopy() throws Exception{
  Person p1=new Person();
  p1.setAge(31);
  p1.setName("Peter");
 
  Person p2=(Person) p1.clone();
  System.out.println(p1==p2);//false
  p2.setName("Jacky");
  System.out.println("p1="+p1);//p1=Person [name=Peter, age=31]
  System.out.println("p2="+p2);//p2=Person [name=Jacky, age=31]
}

clone 有一行默认的代码 :super.clone();
因为首先是把父类的成员复制到位,然后才是复制自己的成员

22、面向对象的特征(特点)

1)抽象

找出一组事物的共性,把这些事物归纳成一个类,抽象事物的 属性和行为
分别对应类的属性和方法

2)封装

把对象的属性和行为放到一起,把握的原则:把对统一事物的 相关的数据和操作数据的方法放在同一个类中

3)继承

提高代码的重用和可扩展性

4)多态

多态性是指允许相同或不同子类型的对象对同一消息作出不同响应

引用变量指向的具体类型和其调用的方法编程时不确定,运行期间才确定
多态的机制可以动态的绑定
写到这里,想起了一个问题:运行时多态 和编译多态 参考文章

23、java中实现多态的机制

引用自 https://blog.csdn.net/qq895627041/article/details/82109576

1)接口

接口中的变量会被隐式地指定为public static final变量。
接口中的方法都是抽象方法。
一个类可继承多个接口。
实现接口需实现接口中的所有方法。

示例代码

public interface InterDemo(){
    void setData();
    int getCount();
}
 
public class InterImpl implements InterDemo(){
    
    @Override
    public void setData(){
        //....
    }
    
    @Override
    public void getCount(){
        //....
    }
}
2)抽象类
interface FlyInter {
    void fly();
}
 
public abstract class FlyGroups implements FlyInter{
    public String name = "飞行类";
    public String getName(){
        return name;
    }
    abstract void fun();
}
 
 
public class Airplane extends FlyGroups {
    @Override
    public void fly() {
        String name = super.getName();
        System.out.println(name);
    }
    @Override
    public void fun(){
    }
}
3)继承父类,子类重写父类的方法
public class Parent{
 
    public void fun(){
    }
}
 
public class Child extends Parent{
    @Override
    public void fun(){
        //子类的重写
    }
}
4)同一个类中的方法重载
public class Parent{
 
    public void fun(){
    }
}
 
public class Child extends Parent{
    @Override
    public void fun(){
        //子类的重写
    }
}

总结:

java中通过四种方式表达多态
1)通过接口的方式,接口可以包含很多的方法,表达对象的行为,功能
2)通过抽象类的方式,抽象类中的抽象方法只有方法头,没有方法的具体实现,因为抽象类不能实例化,在子类继承抽象类,重写抽象方法的时候,可以表达子类独立的实现,每个子类都可以有不同的实现
3)通过继承,子类可以重写父类的方法 *** 并且通过父类的引用指向子类的对象***,可以更好的表达多态的特点,多用于 参数接收对象
4)通过同一个类中的方法重载,同名不同参,相同的方法名,不同的参数,实现重载

24、 抽象类和接口的区别

详情参看 https://blog.csdn.net/GorgeousChou/article/details/88071884

1)语法上的区别

1.抽象类可以有构造方法,接口没有构造方法
2.抽象类可以有普通的成员变量,接口中没有普通的成员变量
3.抽象类中可以包含非抽象的普通方法,接口的方法默认是 public abstract

4.抽象类可以包含静态方法,接口不能包含静态的方法
5.一个类可以实现多个接口,但是一个类只能继承一个抽象类

2)使用上的区别

1.抽象类的本质是一个 类
2.接口表征是一种能力

我的总结

25、抽象方法是否可以说 static native synchronized

抽象方法不可以是 static的,抽象方法表示需要给 子类实现,static和子类没有关系
native 表示该方法需要依赖另一种编程方法实现

synchronized 需要配合具体的方法才可以,需要配合 this,确定同步锁的 对象,抽象方法上,无法确定 this 是什么

26、什么是内部类、 static nested class 和 inner class

省略,内部类现在 用的不多

27、内部类可以引用它的包含类的成员吗

可以,如果不是静态内部类,就没有什么影响

28、Annoymous inner class (匿名内部类)是否可以继承其他的类,是否可以实现接口

必须 继承其他的类或者实现接口

29、super.getClass() 方法的调用

public class Father {

}

public class Son extends Father{
	public void myGetSuperClassName() {
		System.out.println(super.getClass());
		
		System.out.println(super.getClass().getSuperclass().getName());
	}
	
	public static void main(String[] args) {
		new Son().myGetSuperClassName();
		
	}

}

输出的结果
class test29.Son
test29.Father

30、String 是基本的数据类型吗

答案 : 不是
基本的数据类型 只有8个

int 、double、float、short、long、char、byte、boolean

String是 引用类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值