抽象类中,是否可以包含非抽象方法? 抽象类名和抽象方法名之前,是否可以省略abstract修饰? 抽象方法的访问控制修饰是否可以是private?为什么? 用抽象类派生子类时,用extends还是implements? 回答下列接口问题: 接口仅能包含常量和三种方法,是哪三种? 常量之前的修饰符是否可省略?三种方法中,哪种方法名之前的修饰符可略?哪种不能省略? 实现接口时,用extends还是implements? //复习题12 //各种修饰符 public,private, pro
时间: 2024-04-04 19:35:19 浏览: 19
1. 抽象类中可以包含非抽象方法。
2. 抽象类名和抽象方法名之间不能省略abstract修饰。
3. 抽象方法的访问控制修饰不能是private,因为private方法不能被子类继承和重写,而抽象方法必须被子类实现。
4. 用extends关键字来派生一个子类,因为抽象类本身就是一个类,可以用extends关键字来继承。
5. 接口只能包含常量、抽象方法、默认方法和静态方法这三种方法。
6. 常量之前的修饰符可以省略,默认为public、static和final。抽象方法和默认方法的修饰符必须显式声明为public,静态方法必须显式声明为public和static。
7. 实现接口时用implements关键字。
8. public修饰符可以被任何类访问,private修饰符只能在本类中访问,protected修饰符可以被子类和同一个包中的类访问,而没有修饰符的成员变量和方法可以被本类、同一个包中的类和子类访问。
相关问题
java中的抽象类的类名是否可以定义变量赋值其子类的
是的,Java中的抽象类的类名可以定义变量并赋值给其子类的实例。这是因为抽象类可以作为引用类型,在实际使用中,可以将抽象类的引用指向其子类的对象。
下面是一个示例:
```java
abstract class Animal {
public abstract void sound();
}
class Dog extends Animal {
public void sound() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal {
public void sound() {
System.out.println("喵喵喵");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog(); // 抽象类Animal的引用指向子类Dog的实例
animal1.sound(); // 调用子类Dog的方法
Animal animal2 = new Cat(); // 抽象类Animal的引用指向子类Cat的实例
animal2.sound(); // 调用子类Cat的方法
}
}
```
输出结果:
```
汪汪汪
喵喵喵
```
在上述示例中,变量 `animal1` 和 `animal2` 的类型都是抽象类 `Animal`,但它们分别指向了 `Dog` 和 `Cat` 的实例。这样做的好处是,通过抽象类作为引用类型,可以统一处理不同子类的对象,并且调用相应子类的方法。
1.什么是抽象方法?什么是抽象类?如何定义?有什么作用?
抽象方法是一种没有具体实现的方法,只有方法声明,没有方法体。抽象类是包含抽象方法的类,它不能被实例化,只能被继承。抽象类的目的是为了让子类去实现它的抽象方法,以便子类能够具体化抽象类中的行为。抽象方法和抽象类的定义格式如下:
```
public abstract 返回值类型 方法名(参数列表);
public abstract class 类名{}
```
抽象类的作用是抽取共性时,无法确定方法体,就把方法定义为抽象的,强制让子类按照某种形式重写。在大型开发时,用抽象类定义在父类方法以防找不到子类方法。抽象方法所在的类,必然是抽象类。抽象类不一定要有抽象方法。当一个类继承一个抽象类时,子类要么重写抽象类的所有抽象方法,要么定义为抽象类。抽象类无法被对象调用,但可以创建构造方法(在子类用super赋值),抽象类无法创建对象。