果冻java_Java拾遗

虽然去年就自学过Java,也写过Android。但是最近又爆出很多问题,很多细节问题,很多基础问题。这让我再次意识到基础的重要性。

问题一:子类何时调用父类的构造方法

如果你之前问我,我肯定会说,super的时候。

tongue.gif

那么问题来了

实际呢,没有super也会调用的

awkward.gif

class parent {

public parent() {

System.out.println("parent");

}

}

public class Child extends parent {

public Child() {

System.out.println("Child");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Child c = new Child();

}

}结果:

parent

Child子类新建对象的时候都会调用父类的构造方法。而如果使用了super那么就调用super指明的父类构造方法,如果没写super,那么默认调用父类的无参构造方法,如果此时父类没有无参构造方法,则报错。

super一般是用来用父类的含参构造方法来初始化子类的。当然了super可以是super(),这样调用的还是父类无参的,不过没什么意义。

总之一句话,子类每次新建对象都会调用父类构造方法,并且只有一次。

class parent {

public parent() {

System.out.println("parent");

}

public parent(String name){

System.out.println("I'm "+name);

}

}

public class Child extends parent {

public Child() {

super("jelly");

System.out.println("Child");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Child c = new Child();

}

}答案是:

I'm jelly

Child

问题1.1如果父类是抽象类呢

首先要明确的是,抽象类也是可以有构造方法的,虽然抽象类本身不能实例化。

我可以负责任的告诉你,抽不抽象都无所谓。上面所说的内容都适用于抽象父类,结果也相同。

问题二:静态成员可以被this引用吗

我们都知道在定义类的时候,其内部所有成员,我们大都可以直接引用,或者通过this来引用。比如:class parent {

String name;

public parent(String name){

this.name=name;

}

}因为参数名和成员名重复了,所以一般都会用this来引用name成员。

但如果在声明的时候,改为:static String name;呢。

那么问题来了。

答案是可以不会报错,但是不鼓励这样写,比如eclipse就会给你一个叹号:并提示:

The static field parent.name should be accessed in a static way

问题三:静态成员会被默认初始化吗

我们都知道,Java是一种极其安全且严格的语言,所以如果我们的成员声明的时候没有初始化,它会自动初始化。比如 int 初始化为0,boolean为false,对象就为null。

那么问题来了。

静态成员也会被默认初始化吗

答案是可以的。

问题四:接口中的方法能动态绑定吗

我们都知道,java中当用子类初始化父类句柄的时候(比如Parent p = new Child();),会调用子类中的方法而不是父类中的同名方法,即为动态绑定。(C++需要使用virtual关键字来实现)

class Parent {

public void callMe() {

System.out.println("Call me father!");

}

}

public class Child extends Parent {

static String name;

public void callMe() {

System.out.println("Call me child~");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Parent p = new Child();

p.callMe();

}

}结果是:

Call me child~这就是动态绑定。

那么问题来了。

如果子类中实现了某接口中的方法,而父类没有实现该接口,那么我么可以用父类的句柄来调用该接口中的方法吗?

class Parent {

public void callMe() {

System.out.println("Call me father!");

}

}

interface Game {

public void gamename();

}

public class Child extends Parent implements Teacher {

static String name;

public void callMe() {

System.out.println("Call me child~");

}

@Override

public void gamename() {

// TODO Auto-generated method stub

System.out.println("I love LOL");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Parent p = new Child();

p.gamename();//注意这句

}

}

那么请注意,上例可以正确运行吗?即父类句柄p可以调用子类实现的接口中的方法gamename吗?

答案是否定的。

我们必须对p进行转型才能调用该方法。

那么问题来了。

你应该会想到转型成Child类型。如果你只有一个类实现了Game接口,我们可以这样做。但如果我们有一个父类的数组,并且许多不同的子类(本例中,比如有Child1,Child2等等)实现了某一接口。

我们该如何实现自动调用子类中对应的接口呢?

答案是转型成接口!!

Parent obj[]=new Parent[5];

for (int i = 0; i < 5; i++) {

((Game)obj[i]).gamename();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值