您的位置 首页 java

「酒窝说:」java程序员,多态,抽象类,关键字

1.1

Java多态:
 

多态是同一行为具有多个不同的表现形式或形态的能力。

多态就是同一接口,使用不同的实例而执行不同操作

 方法重写和方法重载的区别(常见面试题):
 

1.方法的重写是子类方法覆盖父类的方法,要求方法名和参数都相同。

2.方法的重载是在一个类中的两个或者两个以上的方法

 super关键字
 

作用:super代表当前子类对象的父类特征

用途:

第一种用途:

在子类的构造方法中super关键字可以显式地调用父类的构造方法,用于将参数传递给他。

第二种种用途:

如果父类和子类中有同名的成员,在子类默认访问时属于自己的那一个成员。

注意:

1.子类的无参构造方法没有this(),super()系统默认调用的父类的无参构造方法。

2.super可以出现在成员方法和构造方法中,在构造方法中只能出现在第一行所以在构造方法中this(),super()不能共存。

 子类的构造方法为什么有一句隐式的super呢?
 

原因:子类会继承父类中的内容,所以子类在初始化的时候,必须先找到父类去执行父类的初始化动作,才可以更方便的使用父类的内容。

 报错,参数列表不一样,是什么原因? 因为父类中没有空参的构造方法
 

解决方法:

1.在父类中定义一个空参的构造方法

2.改为一个显示的super(),通过这个super来指向相对应的构造方法。

 子类的 实例化 过程:
 

子类中所有的构造方法都会访问父类中默认的空参构造方法;

如果调用带有参数的构造方法就要加个super(1);

当this()和super()同时存在的时候都会报错,只能有一个,只能定义一个,只能定义在构造方法的第一行

因为初始化动作要先执行,子类里面里面无论有多少个this至少一个会找父类;

 问题:
 父类构造方法是否也有隐式的super()呢?
 只要构造方法第一行都有super(),那父类调用的是谁的构造方法?
 

父类的super()是object,java体系在设计时,定义了一个对象的父类(Object),父类继承的是Object

 总结:
 

类中的构造方法默认的第一行都有隐式的super();

所以父类的构造方法可以给自己的对象初始化,也可以给自己的子类对象初始化。

 final 关键字
 

作用: final是一个修饰符,用来修饰类,方法,变量。

注意:

1.如果一个类被final修饰则表示这个类不能被继承。

2.如果一个方法被final修饰则表示这个方法不能被重写。

3.如果一个 局部变量 被final修饰,那么该变量的值一旦被指定,就不能再改变。

一般 final 和 static 共同修饰成员变量,表示为常量,所有变量名字母大写。

2.1

2.2

  抽象类 

使用:定义抽象类同样使用关键字 abstract ,使用关键字abstract声明抽象方法。

注意:

1.抽象类不能实例化,不能创建对象。

2.抽象类抽象方法不能被final修饰。

3.抽象类中可以定义抽象方法,抽象方法不要方法体,直接在参数列表后面以”;”结束。

4.抽象类中可以没有抽象方法,但是抽象方法只能在抽象类中。

5.一个非抽象类继承我们的抽象类,必须将抽象类中的所有抽象方法进行重写。

 细节问题:
 

1.抽象类一定是一个父类?

是的,因为子类要继承。

2.抽象类是否有构造方法?

有,虽然不能给自己的对象初始化,但是可以给子类进行初始化。

 2.抽象类和一般类的相同点和异同点:
 

相同点:

1.它们都是用来描述事物。

2.他们之中都可以定义属性和方法。

3.他们都是类。

不同点:

1.一般类可以具体的描述事物,但是抽象类不具体,只能有方法的存在,不能有方法的具体。

2.抽象类中可以定义一个成员,抽象方法。

3.一般类可以创建对象,抽象类是不能创建对象的。

 3.抽象类是否就可以不调用抽象方法呢?
 

可以,那么这个抽象类存在有什么意义呢?仅仅是不让该类创建对象。

 4.抽象关键字不可以和那些关键字共存?
 

final:被final修饰的类是最终类,既然是最终子类就不能继承。

private:被私有后子类没有访问权限。

static:没有意义,因为静态是可以通过方法来进行调用的,但是对象类中无相应的方法体现,调用无意义。

文章来源:智云一二三科技

文章标题:「酒窝说:」java程序员,多态,抽象类,关键字

文章地址:https://www.zhihuclub.com/173134.shtml

关于作者: 智云科技

热门文章

网站地图