由于也是第一次接触这两个概念,可能理解没有那么深,但至少是符合小白阅读的。跟随今天的作业来学习继承和多态吧!
1、多态是什么,多态的前提条件是什么?
嗯。。。有点懵。多态是Java中面向对象思想中的核心思想之一,是指子类可以通过继承、实现等方式去实现一个事物可以拥有多种形态。是有点抽象,后面通过实例慢慢了解吧。
前提条件:必须在有继承或者实现的基础上
2、多态中成员访问的特点分别是什么?
格式:Fu f = new Zi(定义类似于创建某一个类型的变量。但多态中等号左边是父类,等号右边是子类,子类是继承父类的)
编译运行中特点:
1.成员变量:编译看等号左边,运行也看等号左边
2.成员方法(非静态方法):编译看等号左边,运行看等号右边
3.静态方法:编译看等号左边,运行也看等号左边
总结:先死记,后续理解了会补充(可在文章第六点实例中编写体会)
3、什么是接口,它的特点是什么?
接口是Java中面向对象的一种机制,类似于抽象类,但不是抽象类。其定义的方法,只有方法特征,没有具体的方法主体。
特点:接口中定义的方法必须是抽象方法,若不写public abstract默认也是抽象方法,后面在实现接口的时候必须进行方法的重写才能调用。
格式:<修饰符> interface <接口名>(参数){
定义变量量;//叫是叫做变量,但值是确定的
定义抽象方法;
}
4、接口的成员特点有哪些?
成员包括成员变量和成员方法。
成员变量:前缀即使不加,系统默认也是static final
public static final 变量名 = 值;
成员方法:必须是抽象方法,即使不加抽象abstract 前缀,系统默认也是抽象。
5、抽象类和接口的区别是什么?
1.抽象类中可以定义非抽象方法。而接口中必须都是抽象方法。
2.抽象类的继承只能是单继承、多层继承。
接口中可以被类多实现(实现和继承只是关键字不同,大致功能是一样的。实现implements;继承extends)
接口之间可以多继承、多层继承。
6:定义一个父类Animal eat方法 , 定义两个子类 Dog 特有方法keepHome , Cat 特有方法 catchMouse ;并且 重写eat方法
测试类中写一个方法,参数列表有一个参数Animla类型,
要求: 调用该方法分别传递Dog对象 和Cat 对象, 使用instanceof进行将转后调用eat,和他们的特有方法
package cn.Demo01;
/*
* 定义一个父类Animal eat方法 , 定义两个子类 Dog 特有方法keepHome , Cat 特有方法 catchMouse ;并且 重写eat方法
测试类中写一个方法,参数列表有一个参数Animla类型,
要求: 调用该方法分别传递Dog对象 和Cat 对象, 使用instanceof进行将转后调用eat,和他们的特有方法
*/
public abstract class Animal {
public abstract void eat();
}
package cn.Demo01;
public class Dog extends Animal{
public void eat(){
System.out.println("狗在吃饭");
}
public void keepHome(){
System.out.println("狗看家");
}
}
package cn.Demo01;
public class Cat extends Animal{
public void eat(){
System.out.println("猫吃饭");
}
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}
package cn.Demo01;
public class Test {
public static void main(String[] args){
Animal d = new Dog();
Animal c = new Cat();
ceshi(d);
ceshi(c);
}
public static void ceshi(Animal a){
if(a instanceof Dog){
Dog d = (Dog) a;
d.eat();
d.keepHome();
}
if(a instanceof Cat){
Cat c = (Cat) a;
c.eat();
c.catchMouse();
}
}
}
7.测试: 如果一个方法的返回值类型是父类,那么能否返回一个子类对象.(该父类不管是类,抽象类还是接口)
父类是类:可以
package cn.Demo02;
/*
* 测试: 如果一个方法的返回值类型是父类,那么能否返回一个子类对象.(该父类不管是类,抽象类还是接口)
测试父类是类
*/
public class Fu {
public void ceshi(){
System.out.println("这是父类");
}
}
package cn.Demo02;
public class Zi extends Fu{
public void ceshi(){
System.out.println("这是子类");
}
}
package cn.Demo02;
public class Test {
public static void main(String[] args) {
Fu z = ceshi(); //此处若是子类接受,则不可以
z.ceshi();
}
public static Fu ceshi(){
Zi z = new Zi();
return z;
}
}
父类是抽象类:
父类是接口:
这两个等有时间再验证。