1.随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
2.用abstract关键字来修饰一个类时,这个类叫做抽象类;
3.用abstract来修饰一个方法时,该方法叫做抽象方法。
抽象方法:只有方法的声明,没有方法的实现。以分号结束:abstract int abstractMethod( int a );
4.含有抽象方法的类必须被声明为抽象类。
5.抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。
6.不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法。
实例一:
package com.atguigu.java; /* * abstract:抽象的,可以用来修饰类、方法 * * 1.abstract修饰类:抽象类 * >不可被实例化 * >抽象类有构造器(凡是类都有构造器) * >抽象方法所在的类,一定是抽象类。 * >抽象类中可以没有抽象方法。 * >当我们设计一个类,不需要创建此类的实例的时候,就可以考虑将其设置为抽象的,由其子类实现这个类的抽象方法。 * * 2.abstract修饰方法:抽象方法 * >格式:没有方法体,包括{}.如:public abstract void eat(); * >抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此方法。 * >若子类继承抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,即可以实例化。 * >若子类继承抽象类,没有重写所有的抽象方法,意味着此类仍有抽象方法,则此类必须声明为抽象类。 * */ public class TestAbstract { // Person p1 = new Person(); // p1.eat(); } abstract class Creator { abstract void breath(); } abstract class Person extends Creator { String name; public abstract void eat(); public abstract void walk(); public String getName() { return name; } public void setName(String name) { this.name = name; } // public void eat() { // System.out.println("吃饭"); // } // // public void walk() { // System.out.println("走路"); // } public Person() { } public Person(String name) { this.name = name; } } class Student extends Person { public void eat() { System.out.println("学生吃饭"); } public void walk() { System.out.println("学生走路"); } @Override void breath() { // TODO Auto-generated method stub } } abstract class Worker extends Person { public void eat() { System.out.println("工人吃饭"); } public void walk() { System.out.println("工人走路"); } }
实例二:
package com.atguigu.java; /* * abstract 不能用来修饰属性、私有方法(private)、构造器、静态方法、final的方法 */ public class TestAbstract1 { } class A1 { // private abstract int i; // 构造器不能被重写 // public abstract A1(); // 子类不能重写声明为private的方法 // private abstract void method1(); // public abstract final void method2(); // public abstract static void method3(); }
练习:
package com.atguigu.test; /* * 编写一个Employee类,声明为抽象类,包含如下三个属性:name,id,salary。 * 提供必要的构造器和抽象方法:work()。对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。 * 请使用继承的思想,设计CommonEmployee类和Manager类,要求类中提供必要的方法进行属性访问。 */ class CommonEmployee extends Employee { @Override public void work() { System.out.println("我是普通员工我要努力工作"); } } class Manager extends Employee { private double bonus; public double getBonus() { return bonus; } public void setBonus(double bonus) { this.bonus = bonus; } @Override public void work() { System.out.println("监督员工工作"); } } abstract class Employee { private String name; private int id; private double salary; public abstract void work(); public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } } public class TestEmployee { public static void main(String[] args) { // Manager m = new Manager(); Employee e1 = new Manager(); e1.work(); Employee e2 = new CommonEmployee(); e2.work(); } }
相关推荐
### C# 抽象类与抽象方法详解 #### 一、引言 在面向对象编程中,抽象类和抽象方法是实现多态性的重要手段之一。C#作为一种强大的面向对象编程语言,支持抽象类和抽象方法的概念。本文将详细介绍C#中的抽象类与抽象...
"浅析Java中的抽象类与抽象方法.pdf" 本文主要探讨了Java中的抽象类与抽象方法,并对信息系统审计工作进行了深入分析。首先,我们介绍了信息系统审计的内容,包括内部控制审计、软件硬件审计和计算机生命同期审计等...
【Java面向对象(高级)- 抽象类与抽象方法(或abstract关键字)】 在Java编程语言中,面向对象编程是其核心特性之一。抽象类和抽象方法是面向对象编程中的重要概念,它们允许程序员创建一种通用的模板,用于定义一...
在C#编程语言中,抽象类(abstract class)和抽象方法(abstract method)是面向对象设计中的关键概念,它们主要用于支持多态性。抽象类是一种特殊的类,它不能被实例化,只能作为其他类的基类。抽象方法则是没有...
### Java中的抽象类与抽象方法详解 #### 一、引言 在Java编程语言中,面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它通过类和对象的概念来组织代码,提高代码的复用性和可维护性。其中...
1. **继承与多态**:通过继承抽象类,子类可以获取父类的所有属性和方法,包括抽象方法。子类必须实现所有的抽象方法,否则它也会成为一个抽象类。这种机制使得多态成为可能,即同一操作作用于不同的对象,可以有...
在深入探讨Java抽象类与抽象方法之前,我们首先需理解其基本概念以及它们在面向对象编程中的作用。Java作为一种广泛使用的编程语言,提供了多种机制来实现代码的复用性和灵活性,其中抽象类和抽象方法是关键特性之一...
抽象类与抽象方法由abstract修饰 abstract的使用注意 抽象方法没有方法体 抽象成员只能存在于抽象类中 抽象类可以有非抽象成员(侧重族群的概念) 抽象类的子类必须实现抽象方法体 抽象类you构造函数 抽象类只能...
计算机后端-Java-Java核心基础-第15章 面向对象07 06. 抽象类与抽象方法的使用.avi
3. **抽象属性与方法**:抽象类可以包含普通属性、虚方法以及普通方法,但一旦包含了一个或多个抽象方法,整个类就必须被标记为`abstract`。 4. **派生类的要求**:派生类必须实现基类中的所有抽象方法。如果派生类...
这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public ...
在编程领域,虚方法和抽象类是面向对象编程中的核心概念,它们对于设计可扩展和灵活的代码架构至关重要。在C#中,这两个概念经常一起使用,以实现多态性,这是一种允许不同对象对同一消息作出不同响应的能力。让我们...
本次实验主要聚焦于Java编程语言中抽象类和接口的概念理解与实际运用,旨在深入掌握抽象类与抽象方法的定义,以及接口的定义与实现方法。通过具体实例,如形状类的创建与扩展,电话类的层次构建,以及教师类的排序...
【C#抽象类与接口方法】在C#编程语言中,抽象类和接口是两种用于实现多态性和封装的关键概念,它们允许我们设计灵活、可扩展的代码结构。 抽象类是一种特殊的类,它不能被实例化,而是作为其他类的基类使用。抽象类...
本文实例为大家分享了C#抽象类与抽象方法的具体实现代码,供大家参考,具体内容如下 1.代码 class Program { static void Main(string[] args) { for (int i = 1; i < 10; i++) { if (i % 3 == 1) { ...
但如果你想要创建一个与抽象类有关的代理对象,可以借助第三方库如Javassist或ByteBuddy等字节码工具。这些库允许你在运行时动态生成类,包括实现抽象类和接口。 在Android开发中,由于Javassist库在Android环境中...
1. 创建一个抽象类,比如`Vehicle`,并定义抽象方法如`startEngine()`、`stopEngine()`等,然后创建几个不同的车辆类(如`Car`、`Bike`)来继承这个抽象类并实现这些方法。 2. 定义一个`Animal`接口,包含`eat()`、`...
"C#中的抽象方法和抽象类" C#中的抽象方法和抽象类是面向对象编程的重要概念,它们可以帮助开发者设计更加灵活、可扩展和维护的软件系统。本文将详细介绍抽象方法和抽象类的概念、特征和使用场景。 一、抽象方法 ...
5. **抽象类与抽象方法**: 抽象类是不能实例化的类,通常用来作为其他类的基类。它可能包含抽象方法,抽象方法没有具体实现,只有方法签名。定义抽象类使用`abstract`关键字,抽象方法不包含大括号。如果一个类...
1. **抽象方法与抽象类**: - **抽象方法**:抽象方法是一个只有声明没有具体实现的方法,它以分号结尾,没有大括号包围的具体代码。抽象方法由`abstract`关键字修饰,并且必须存在于抽象类中。 - **抽象类**:...