暂无权限

加入尚新途,才有权限看这些视频哦!

点击前往
×
问答
人间乌龙茶
1楼

image.pngimage.png第五行为啥实例化还必须是静态方法,我记得static void main里new后的类不需要静态呀,老师课件上也是一样的,但没有报错,这是为啥呀?

尚新途

image.png

一个男人
2楼


1、这个③忽然不太理解是什么意思来着?什么子类继承父类来着?老师帮忙加深一下

   印象可以吗?

2、②和③的关系是什么呢老师?

4.png

尚新途

1、接口不可以创建对象,接口要new对象的时候必须要new他的实现类。

2、2和3没有关系,他们之间就是通过2为接口1创建了对象。

这里理解不了也没事,往后学,到了后面自然而然就理解了,。

????
3楼

老师你好

C c=new CImpl01();和CImpl01 c=new CImpl01();的差别是不是就多一个向上转型?

我有一个疑问CImpl01是运行时类型,C是编译类型,如果CImpl01在实现了接口C后,又写了自己的方法X,用C c的c是不是调用不了X,用CImpl01 c才能调用那个方法X?


尚新途

是的,这个就是多态的特征,编译看父类,运行时看子类。如果子类添加了自己的方法,是调用不到的。只有自己才可以调用到自己的方法,因为编译时是按照父类进行编译的。

皮? 特别皮
4楼

老师,

C c = new CImp01();

这段代码是否可以换成

CImp01 c = new CImp01();

以下是完整代码

public class TestMultiplelnheritance {
    public static void main(String[] args) {
        C c = new CImp01();             //接口 变量名=new 实现接口();
        c.testA();                      //调用重写后的方法
        c.testB();                      //调用重写后的方法
        c.testC();                      //调用重写后的方法
    }
}

interface A{                            //接口A
    void testA();
}

interface B{                            //接口B
    void testB();
}

interface C extends A,B{                //接口C,继承了接口A和B,所以拥有接口A和B的方法
    void testC();
}

class CImp01 implements C{              //子类实现接口
    @Override
    public void testA() {               //重写方法
        System.out.println("我是A");
    }

    @Override
    public void testB() {               //重写方法
        System.out.println("我是B");
    }

    @Override
    public void testC() {               //重写方法
        System.out.println("我是C");
    }
}


尚新途

可以的

Fintik
5楼

老师我有点乱,接口不是应该用implements承接接口的吗,extend不是用来继承类的嘛


5.302.png



尚新途

接口和接口直接是继承的关系 要使用extend关键字

迷茫中前进的临泉
6楼

老师,你好:


我在复习这部分知识的时候有一个关于“抽象类和接口”的疑惑:

  • 什么时候更适合抽象类?什么时候更适合接口?


我在今天复习的时候,发现两者有相似的地方

  • 都可以作为一种规范

  • 都可以强制子类/实现类必须实现抽象方法

所以由此产生的疑惑。


谢谢

尚新途

一、什么时候使用抽象类?

当2个或多个类中有重复部分的时候,我们可以抽象出来一个基类,如果希望这个基类不能被实例化,就可以把这个基类设计成抽象类。

当需要为一些类提供公共的实现代码时,应优先考虑抽象类 。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。

抽象类只能是单继承的,不能多继承。

二、什么时候使用接口?

当注重代码的扩展性跟可维护性时,应当优先采用接口。

①接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;

②接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。


尚新途

核心思想get,以后在实战中加强!


谢谢老师

尚新途

不客气哦

风止意难平
7楼

为什么 interface A不行,但是把A换成其他的就可以呢?


14.png

尚新途

你这个A是不是已经定义过了,不能重名

尚新途

在同一个包中有A这个定义

尚新途

那就不行的,同一个包下不允许有重名的类的,这个就和你在同一个文件夹下不能有相同的txt文件是一个道理

尚新途

奥奥,明白了,

尚新途

JHaoYu
8楼
package com.xgc.testInterface;
/**
 * 测试接口的多继承
 */

public class Testmorejicheng {
    public static void main(String[] args) {
        CinFo c=new CinFo();
        c.testA();
        c.testB();
        c.testC();

    }
}

interface A {
    void testA();
}

interface B{
    void testB();
}

interface C extends A,B{
    void testC();
}

class  CinFo implements C{

    @Override
    public void testA() {
        System.out.println("A");
    }

    @Override
    public void testB() {
        System.out.println("B");
    }

    @Override
    public void testC() {
        System.out.println("C");
    }
}

老师 我想问下类在实例对象的时候 老师视频中写的是接口的引用 

C c=new CinFo();

用的是接口的引用 ,但是我用自身的类做引用也可以

 CinFo c=new CinFo();

这两个有什么区别

温如言
9楼

接口是不是和类一样也不能继承父类的构造器

尚新途

接口本身就没有构造方法。

TPP
10楼

既然有了接口,那为什么还需要用到抽象类呢?抽象类不是和接口一样,也不能被实例化。那它相比于接口,和普通类。

普通类实现了继承,接口实现了规则定义。抽象类好像没有什么用处,

尚新途

你可以参考一下这个

https://blog.csdn.net/qq_41933748/article/details/82670072

TPP
11楼

  image.png

老师,这后面半句话怎么理解?什么叫用户引用变量类型

尚新途

比如:

    接口 变量名=new 实现接口();


12楼

请问老师,接口不是可以直接创建对象吗。我自己调试了下好像是可以的

尚新途

不可以的,你那样直接创建的的叫你匿名内部类,后面会学到的

邮寄日出
13楼

老师,请问一下接口Z继承了接口A和Q,那么它不是应该有A和Q的方法吗,为什么类shiyan不用实现它们之中的方法

呢,运行正常没有报错。

shixian[object Object]
尚新途

需要实现呀

image.png

image.png

image.png

image.png

如果删掉一个方法

image.png

会报错

任仕诚
14楼

image.png

视频上说抽象类不能实例化,这里是不是错了

尚新途

这个已经和后台反应了,在修改当中。

lavenders
15楼

image.png

闯关里面这个,抽象类可以定义构造器,但是不能实例化。

尚新途

不能直接实例化,这个答案我反馈一下吧,修改一下吧。

自我检测(5S)