为什么第8行不是volant.而是Volant.
因为那个属性是静态的,可以用类名调用
感觉接口和抽象用法很类似,实际应用中怎么选呢?
抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。
下载好之后重新点击这个就会出现下载的页面,没有所谓的卸载
只有安装了之后,再次点击这个才会有卸载。
这里的错误在哪里?
实现接口的方法,需要使用pubic去修饰
这里出现了什么问题?
如果这个类里有一个方法是抽象方法,那么这个类必须是抽象类,完后方法是被abstract修饰后,是不能有方法体的,方法题就是方法的这对儿大括号
老师,这个fly和helpOther方法明明是同一级别的方法,为什么有fly能调,helpOther不能调?
因为a2的类型时Volant类型,这个类中没有helpOther这个方法。
接口内不能有任何方法的实现,那么接口内用于声明引用变量类型的意义何在?
接口里面的变量默认就是被final修饰的,在接口里面去定义,可以定义一些常量,比如圆周率,比如你自己定义一个方法,就是每个月的奖金,这个也是一个定值,不允许别的对象去修改的值就可以的定义进接口里
老师能解答下这句话吗 父类引用指向的子类对象 这句话第一次出现是在类的继承里面的转型章节 最好能结合两个一起讲下 麻烦了谢谢
这个就是Java多态的一个应用,用父类类型直接创建子类对象,实际类型是具体的子类对象,可以降低代码的耦合
强制转型怎么出错了
不应该这样转
这样去转,把一个Volant类型的转换成Angle类型的
老师,我这咋不生成新的接口文件啊?
点击这个包,右键创建接口,就会生成一个新的接口类。
父类引用子类对象什么意思啊............
父类 a = 子类对象();
父类引用指向子类对象,a是父类型的引用,= 是指向
重写的方法代码上面一行的@Override这个是必须在代码里的么?就是我自己手敲重写方法的话,这个也要写上去么?
这个不需要的,这是软件自动给加的,加不加都不影响的,手写的时候不需要写的
用类实现接口的时候, 类重写方法 是抽象类吗 就是
省略了abstract
因为抽象方法必须被实现,所以接口方法是抽象的,是忽略的
接口的方法是抽象的,
但是实现接口的类 对应重写的方法不是抽象的是吗
实现的类因为不是抽象的类,所以必须重写这个方法
重写之后不是抽象方法的
请问一下,这一块有什么用,我删除这一块之后程序也能运行。
框画错了 不包括abstract那一段
get和set方法,封装的特性,set方法赋值,get方法取值。
public static void main(String[] args){ Volant m1 = new SuperMan(); m1.fly(); Honest h = (Honest) m1; h.helpOther(); }
老师,我想问下这个强制转换类型和继承里的是不是不太一样,它们的区别是什么?继承是要看实例化的是哪一个类么,接口的话只要实例化一个对象了,这个对象实现的接口类型都可以进行强转么?
这里的强转和继承里的一样
强转需要满足被强转的类在运行时为强转的类型