`

用法:abstract抽象类与抽象方法的笔记

阅读更多
/*
 * abstract
 * 抽象类与抽象方法的使用
 * 1.抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
 * 2.如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
 * 3.没有抽象构造方法,也没有抽象静态方法
 * 4.抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
 * */
public abstract class Base {
	//抽象类中可以没有抽象方法,但包含了抽象方法的类就必须被定义为抽象类
	public abstract void method1();
	public abstract void method2();
	public void method3(){}
	//没有抽象的构造方法
	//public abstract Base(){}
	//没有抽象的静态方法
	//static abstract void method4();
	public String var="Base";
	public Base(){
		System.out.println("父类的无参构造方法");
	}
	static void method4(){
		System.out.print("静态方法表示类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。因此,当前类必须为静态方法提供实现");
	}
}

 

//如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
public abstract class Sub1 extends Base {
	public String var="Sub1";
	public void method1() {
		System.out.println("重写父类的method1");
	}
}

 

//否则就必须实现父类的所有抽象方法
public class Sub2 extends Base {
	public String var="Sub2";
	public Sub2(){
		System.out.println("子类的无参构造方法");
	}
		public void method1() {
		System.out.println("重写父类的抽象方法method1");
	}
	public void method2() {
		System.out.println("重写父类的抽象方法method2");
	}
}

 

public class Test {
	public static void main(String[] args) {
		//抽象类不允许实例化
		//Base base=new Base();
		//抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
		//抽象类不能被实例化,但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例
		Base test=new Sub2();
		//method1()是普通方法,在调用时,实行动态绑定,根据test的实例类型来执行。
		test.method1();
		//method4()是静态方法,在调用时,实行静态绑定,根据test的引用类型来执行。
		test.method4();
		//成员变量(static修饰和没有static修饰的变量),在调用时,实行静态绑定,根据test的引用类型来执行。
		System.out.println("\n测试:Test.var调用的是"+test.var+"的变量");
	}
}

 

分享到:
评论

相关推荐

    Java笔记抽象类和接口

    - 抽象类的子类如果要使用这个类,就必须实现所有未实现的抽象方法;如果子类本身也是抽象类,则可以不实现父类的所有抽象方法。 ##### 2.2 使用场景 - 当需要定义一个类族的基本结构,但具体实现细节需要由各个...

    抽象类与接口的练习

    在编程世界中,Java、C#等面向对象的语言中,抽象类和接口是两种重要的设计模式,它们都用于实现多态性,但各有其特点和使用场景。本练习旨在帮助开发者深入理解这两种概念,通过实践巩固理论知识。 首先,我们来...

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    如果一个类包含一个或多个抽象方法,那么这个类必须被声明为抽象类,使用`abstract`关键字标识。例如: ```java abstract class Person { public static final String NAME = "newsainton"; public void print() ...

    Java-抽象类和接口--学习笔记.docx

    接口在Java中是另一种形式的抽象,但它与抽象类有着明显的区别。接口使用`interface`关键字定义,它只能包含静态常量和抽象方法,不允许有任何方法实现。接口的引入是为了支持多重继承,因为Java中类只能单继承,但...

    C#面向对象笔记

    4. 实现:抽象类与接口之间的关系。 抽象类: * 用 abstract 修饰类,即为抽象类。 * 抽象类不能创建对象,也就是不能被实例化。 * 抽象类中可以包含抽象成员(方法、变量、属性等)。 * 抽象方法:用 abstract ...

    java中对象转型多态抽象类接口笔记.doc

    - 如果一个类包含抽象方法,则该类必须声明为抽象类。 - 抽象方法必须在子类中被实现(重写)。 #### 示例: ```java public abstract class Gun { public abstract void shoot(); public void load() { ...

    抽象类与接口(学习笔记)

    抽象类通过`abstract`关键字标识,可以包含抽象方法(没有方法体的方法)和非抽象方法。例如: ```java abstract class Animal { // 抽象方法 abstract void makeSound(); // 非抽象方法 void eat() { System...

    php100关于类的学习笔记

    1. **抽象类**:使用`abstract`关键字定义抽象类。抽象类不能被实例化,它的主要目的是被继承。抽象类可以包含抽象方法和普通方法。 2. **抽象方法**:使用`abstract`关键字定义的方法称为抽象方法。抽象方法没有...

    java笔记

    【Java笔记】主要涵盖了Java语言的一些核心概念和关键特性,包括关键字final、equals与"=="的区别、继承与方法重写、抽象类与接口、异常处理、类常量、枚举类型以及类之间的关系。以下是对这些知识点的详细解释: 1...

    java学习笔记

    10. **接口**:接口在Java中是抽象方法的集合,类似于纯抽象类,但接口中的所有方法默认都是public abstract。一个类可以实现多个接口,但只能继承一个类。 11. **抽象类与接口的区别**:抽象类可以包含非抽象方法...

    Android面试笔记

    若一个类中有抽象方法(用`abstract`关键字修饰的方法),则该类必须声明为抽象类。抽象类中的方法不一定都是抽象的,可以包含具体的实现,但抽象类中的抽象方法必须由子类来实现。如果子类没有实现抽象父类的所有...

    c#接口的意义 学习心得 读书笔记 (彻底弄清楚接口,轻松使用接口)

    六、接口与抽象类的区别 接口和抽象类都是抽象的类型,但它们有以下区别: 1. 实现部分:抽象类可以包含实现部分,而接口不可以。 2. 字段:抽象类可以包含字段,而接口不可以。 3. 继承:抽象类可以继承自其他类...

    C#面向对象密封类与密封方法笔记教程

    3. **抽象类与密封类**:抽象类不允许被声明为密封类,因为抽象类本身就是为继承而设计的。 #### 密封类示例 ```csharp abstract class A { public abstract void F(); } sealed class B : A { public override ...

    javaSE学习笔记

    本篇学习笔记主要涵盖了从基础到进阶的Java SE知识,特别是抽象类和接口的使用,这是理解Java多态性和面向对象编程的关键。 **抽象类**是Java中一种特殊的类,它不能被实例化,而是作为其他类的基类,用于定义共同...

    JAVA上课笔记class_05

    #### 抽象类与抽象方法 - **抽象类**:在Java中,抽象类是一种特殊的类,它不能被实例化,只能作为其他类的父类来继承。一个类如果包含了一个或多个抽象方法,那么这个类必须声明为抽象类。 - **特点**: - 抽象...

    Java基础学习笔记

    16. **抽象类与抽象方法**:抽象类用`abstract`修饰,不能实例化。包含抽象方法的类必须声明为抽象类。抽象方法只有声明,没有实现。抽象类可以包含非抽象方法。 17. **抽象类与抽象方法的规则**:包含抽象方法的类...

    J2SE篇学习笔记1.pdf

    抽象类用 `abstract` 关键字声明,它可以包含抽象方法(只有方法签名,没有实现)。抽象方法在子类中必须被重写,除非子类也是抽象类。在给定的代码中,`Animal` 类是抽象类,`enjoy()` 方法是抽象方法。子类 `Cat`,...

    JavaSE中级笔记

    JavaSE中级笔记主要涵盖了一些核心概念和技术,包括内部类、抽象类、接口以及常用类的使用。以下是对这些知识点的详细解释: 1. **内部类**: - 内部类是在一个类内部定义的类,可以是成员内部类、局部内部类或...

Global site tag (gtag.js) - Google Analytics