第五行为啥实例化还必须是静态方法,我记得static void main里new后的类不需要静态呀,老师课件上也是一样的,但没有报错,这是为啥呀?
1、这个③忽然不太理解是什么意思来着?什么子类继承父类来着?老师帮忙加深一下
印象可以吗?
2、②和③的关系是什么呢老师?
1、接口不可以创建对象,接口要new对象的时候必须要new他的实现类。
2、2和3没有关系,他们之间就是通过2为接口1创建了对象。
这里理解不了也没事,往后学,到了后面自然而然就理解了,。
老师你好
C c=new CImpl01();和CImpl01 c=new CImpl01();的差别是不是就多一个向上转型?
我有一个疑问CImpl01是运行时类型,C是编译类型,如果CImpl01在实现了接口C后,又写了自己的方法X,用C c的c是不是调用不了X,用CImpl01 c才能调用那个方法X?
是的,这个就是多态的特征,编译看父类,运行时看子类。如果子类添加了自己的方法,是调用不到的。只有自己才可以调用到自己的方法,因为编译时是按照父类进行编译的。
老师,
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"); } }
可以的
老师我有点乱,接口不是应该用implements承接接口的吗,extend不是用来继承类的嘛
接口和接口直接是继承的关系 要使用extend关键字
老师,你好:
我在复习这部分知识的时候有一个关于“抽象类和接口”的疑惑:
什么时候更适合抽象类?什么时候更适合接口?
我在今天复习的时候,发现两者有相似的地方
都可以作为一种规范
都可以强制子类/实现类必须实现抽象方法
所以由此产生的疑惑。
谢谢
燕
一、什么时候使用抽象类?
当2个或多个类中有重复部分的时候,我们可以抽象出来一个基类,如果希望这个基类不能被实例化,就可以把这个基类设计成抽象类。
当需要为一些类提供公共的实现代码时,应优先考虑抽象类 。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。
抽象类只能是单继承的,不能多继承。
二、什么时候使用接口?
当注重代码的扩展性跟可维护性时,应当优先采用接口。
①接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;
②接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。
核心思想get,以后在实战中加强!
谢谢老师
不客气哦
为什么 interface A不行,但是把A换成其他的就可以呢?
你这个A是不是已经定义过了,不能重名
在同一个包中有A这个定义
那就不行的,同一个包下不允许有重名的类的,这个就和你在同一个文件夹下不能有相同的txt文件是一个道理
奥奥,明白了,
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();
这两个有什么区别
接口是不是和类一样也不能继承父类的构造器
接口本身就没有构造方法。
既然有了接口,那为什么还需要用到抽象类呢?抽象类不是和接口一样,也不能被实例化。那它相比于接口,和普通类。
普通类实现了继承,接口实现了规则定义。抽象类好像没有什么用处,
你可以参考一下这个
https://blog.csdn.net/qq_41933748/article/details/82670072
老师,这后面半句话怎么理解?什么叫用户引用变量类型
比如:
接口 变量名=new 实现接口();
请问老师,接口不是可以直接创建对象吗。我自己调试了下好像是可以的
不可以的,你那样直接创建的的叫你匿名内部类,后面会学到的
老师,请问一下接口Z继承了接口A和Q,那么它不是应该有A和Q的方法吗,为什么类shiyan不用实现它们之中的方法
呢,运行正常没有报错。
shixian[object Object]
需要实现呀
如果删掉一个方法
会报错
视频上说抽象类不能实例化,这里是不是错了
这个已经和后台反应了,在修改当中。
闯关里面这个,抽象类可以定义构造器,但是不能实例化。
不能直接实例化,这个答案我反馈一下吧,修改一下吧。