### Java 抽象类的相关限制知识点 在Java编程语言中,抽象类是一种非常重要的概念,它主要用于提供一种模板式的设计模式,允许子类继承并实现其中定义的抽象方法。抽象类不能被实例化,但可以作为其他类的父类。下面我们将通过分析提供的示例代码来深入了解关于Java抽象类的一些关键限制。 #### 示例一:抽象类的基本用法及限制 ```java abstract class A { private String name; public A(String name) { System.out.println("构造函数"); } public void fun() { System.out.println("具体方法"); } public abstract void print(); // 抽象方法 } class B extends A { public void print() { // 必须重写抽象方法 System.out.println("hello world"); } } public class TestDemo { public static void main(String[] args) { A a = new B(); // 实例化B类,间接实例化抽象类A a.fun(); a.print(); } } ``` **关键知识点:** - 抽象类不能被实例化,只能作为其他类的基类。 - 抽象类可以包含普通方法(非抽象方法)和抽象方法。 - 子类必须实现父类中的所有抽象方法,否则该子类也必须声明为抽象类。 - 抽象方法没有方法体,必须由子类来实现具体的行为逻辑。 #### 示例二:抽象类与私有构造器的使用 ```java abstract class A { private String name; public A(String name) { System.out.println("构造函数"); this.name = name; } public void print() { System.out.println(name); } } class B extends A { public B(String name) { super(name); System.out.println("构造函数"); } } public class TestDemo { public static void main(String[] args) { A a = new B("hello"); a.print(); } } ``` **关键知识点:** - 抽象类可以拥有私有构造器,用于限制类的实例化。 - 使用私有构造器时,子类可以通过`super()`调用抽象类的构造器。 - 当抽象类包含具体的构造器时,子类仍然可以通过`new`关键字创建实例。 #### 示例三:抽象类内嵌套抽象类的限制 ```java abstract class A { abstract class B { public abstract void print(); } public abstract void fun(); } class C extends A { public void fun() { System.out.println("fun()"); } class D extends B { public void print() { System.out.println("子类print()"); } } } public class TestDemo { public static void main(String[] args) { A a = new C(); a.fun(); A.B b = new C().new D(); b.print(); } } ``` **关键知识点:** - 抽象类可以包含内部抽象类。 - 内部抽象类同样遵循抽象类的一般规则,即不能被实例化且必须由子类实现其抽象方法。 - 外部抽象类的方法可以访问内部抽象类的方法。 #### 示例四:静态成员与抽象类的限制 ```java abstract class A { static abstract class B { public abstract void print(); } public abstract void fun(); } class C extends A { public void fun() { System.out.println("fun()"); } } class D extends A.B { public void print() { System.out.println("子类print()"); } } public class TestDemo { public static void main(String[] args) { A a = new C(); a.fun(); A.B b = new D(); b.print(); } } ``` **关键知识点:** - 抽象类不能包含静态抽象成员类。 - 静态成员类必须是具体的,即不能声明为抽象类。 - 在本示例中,`A.B`声明为静态抽象类是不合法的,这会导致编译错误。 #### 示例五:静态成员变量与抽象类的结合 ```java abstract class A { static String name = ""; public static void print() { System.out.println("hello world"); } } public class TestDemo { public static void main(String[] args) { System.out.println(A.name); A.print(); } } ``` **关键知识点:** - 抽象类可以包含静态成员变量和静态方法。 - 静态成员变量和静态方法可以直接通过类名来访问,无需创建对象实例。 - 这种方式通常用于提供通用的工具方法或共享数据。 Java抽象类虽然具有很多强大的功能,但也存在一定的使用限制。了解这些限制可以帮助开发者更合理地设计类结构,提高代码的质量和可维护性。
/*抽象类里面由于会存在一些属性,那么在抽象类之中一定会存在构造方法,
* 目的:为属性初始化,并且子类对象实例化的时候依然满足于先执行父类构造,再调用子类构造的情况。*/
/*abstract class A{
private String name;
public A(String name) {
System.out.println("父类构造方法");
}
public void fun() {
System.out.println("有方法体的方法!");
}
public abstract void print();
}
class B extends A{
public void print() {
System.out.println("hello world");
}
}
public class TestDemo {
public static void main(String[] args) {
A a = new B();
a.fun();
a.print();
}
}*/
/*抽象类中可以没有任何抽象方法,但是只要是抽象类,那么依然不能够直接使用关键字new实例化对象。*/
/*abstract class A{
private String name;
public A(String name) {
System.out.println("父类构造方法");
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助