您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第6章:面向对象(高级)】_抽象类的基本概念
发布时间:2020-12-16 17:32:44编辑:雪饮阅读()
抽象类只比普通类多了抽象方法
抽象类只有其所有抽象方法都被实现后方可被实例化
abstract class A{
private final String name="snowDrink";
private int age=24;
abstract public String getInfo();
}
public class Hello{
public static void main(String args[]){
A a=new A();
}
}
D:\>javac Hello.java
Hello.java:8: A 是抽象的;无法对其进行实例化
A a=new A();
^
1 错误
另外抽象方法是不能有方法体的即不能有”{}”
抽象类只有所有抽象方法被实现后方可被实例化
abstract class A{
private final String name="snowDrink";
private int age=24;
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
abstract public String getInfo();
}
class B extends A{
public String getInfo(){
return "姓名:"+this.getName()+" 年龄:"+this.getAge();
}
}
public class Hello{
public static void main(String args[]){
B b=new B();
System.out.println(b.getInfo());
}
}
D:\>javac Hello.java
D:\>java Hello
姓名:snowDrink 年龄:24
抽象类可以被final修饰吗?
这样?
final abstract class A{
private final String name="snowDrink";
private int age=24;
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
abstract public String getInfo();
}
public class Hello{
public static void main(String args[]){
}
}
或者这样?
abstract final class A{
private final String name="snowDrink";
private int age=24;
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
abstract public String getInfo();
}
public class Hello{
public static void main(String args[]){
}
}
都是不可行的
D:\>javac Hello.java
Hello.java:1: 非法的修饰符组合:abstract 和 final
final abstract class A{
^
1 错误
D:\>javac Hello.java
Hello.java:1: 非法的修饰符组合:abstract 和 final
abstract final class A{
^
1 错误
既然抽象类是没有被完全实现的类,那么好像构造方法也不该拥有?
但是抽象类可以拥有构造方法。
abstract class A{
private final String name="snowDrink";
private int age=24;
public A(){
System.out.println("抽象类的构造");
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
abstract public String getInfo();
}
class B extends A{
public B(){
System.out.println("子类的构造");
}
public String getInfo(){
return "姓名:"+this.getName()+" 年龄:"+this.getAge();
}
}
public class Hello{
public static void main(String args[]){
B b=new B();
}
}
D:\>javac Hello.java
D:\>java Hello
抽象类的构造
子类的构造
抽象类的子类用super也是没有问题的,无参的
abstract class A{
private final String name="snowDrink";
private int age=24;
public A(){
System.out.println("抽象类的构造");
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
abstract public String getInfo();
}
class B extends A{
public B(){
super();
System.out.println("子类的构造");
}
public String getInfo(){
return "姓名:"+this.getName()+" 年龄:"+this.getAge();
}
}
public class Hello{
public static void main(String args[]){
B b=new B();
}
}
D:\>javac Hello.java
D:\>java Hello
抽象类的构造
子类的构造
不仅仅是无参构造,有参构造也可以存在于抽象类中
abstract class A{
private String name;
private int age;
public A(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
abstract public String getInfo();
}
class B extends A{
public B(String name,int age){
super(name,age);
}
public String getInfo(){
return "姓名:"+this.getName()+" 年龄:"+this.getAge();
}
}
public class Hello{
public static void main(String args[]){
B b=new B("shall",24);
System.out.println(b.getInfo());
}
}
关键字词:java,面向对象,抽象类