java编程abstract类和方法详解

抽象类和抽象方法常用知识点:

(1)抽象类作为被继承类,子类必须实现抽象类中的所有抽象方法,除非子类也为抽象类。

也就是说,如果子类也为抽象类,可以不实现父类中的抽象方法。但是,如果有一个非抽象类

继承于抽象子类,需要实现抽象子类,抽象子类的抽象父类的所有抽象方法,新帐旧账一起算。

(2)抽象类不能用final进行修饰。

(3)抽象类不能被实例化,也就是说你用的时候不能通过new关键字创建。

(4)抽象类中可以包含抽象方法和非抽象方法,抽象方法没有方法体,也就是没有具体实现,

只是定义了有什么功能,但是非抽象方法含有方法体。

eg:

抽象父类Person:

package com.lanhuigu.java;
/**
 * 抽象类:不能用final修饰,
 * 可以包含抽象方法和非抽象方法,
 * 抽象方法没有方法体,只是定义功能,没有实现;
 * 非抽象方法为正常的方法。
 */
public abstract class Person {
	/*
   * abstract methods
   */
	public abstract String eat();
	public abstract String sleep();
	/*
   * non-abstract methods
   */
	public String sport() {
		return "生命在于运动";
	}
}

非抽象子类Teacher:

package com.lanhuigu.java;
/**
 * 继承于抽象类person,必须实现父类中的所有抽象方法
 */
public class Teacher extends Person {
	@Override
	  public String eat() {
		// TODO Auto-generated method stub
		return "老师吃饭";
	}
	@Override
	  public String sleep() {
		// TODO Auto-generated method stub
		return "老师睡觉";
	}
}

非抽象子类Student:

package com.lanhuigu.java;
/**
 * 继承于抽象类person,必须实现父类中的所有抽象方法
 */
public class Student extends Person {
	@Override
	  public String eat() {
		// TODO Auto-generated method stub
		return "学生吃饭";
	}
	@Override
	  public String sleep() {
		// TODO Auto-generated method stub
		return "学生睡觉";
	}
}

抽象子类OthersPerson:

package com.lanhuigu.java;
/**
 * 抽象类继承自抽象类,可以不用实现其父类的抽象方法
 */
public abstract class OthersPerson extends Person {
  public abstract String call();
} 

非抽象子类ExtendsOthersPerson继承于抽象子类OthersPerson:

package com.lanhuigu.java;
/**
 * 必须实现抽象父类OthersPerson,以及OthersPerson父类Person中
 * 的所有抽象方法,新帐旧账一起算。
 */
public class ExtendsOthersPerson extends OthersPerson {
	@Override
	  public String sleep() {
		// TODO Auto-generated method stub
		return "睡觉";
	}
	@Override
	  public String eat() {
		// TODO Auto-generated method stub
		return "吃饭";
	}
	@Override
	  public String call() {
		// TODO Auto-generated method stub
		return "打电话";
	}
}

测试代码:

package com.lanhuigu.java;
public class TestAbstract {
	public static void main(String[] args) {
		Teacher teacher = new Teacher();
		Student student = new Student();
		//OthersPerson othersPerson = new OthersPerson();//报错,抽象类不能被实例化
		System.out.println(teacher.eat());
		System.out.println(teacher.sleep());
		System.out.println(teacher.sport());
		// 继承父类非抽象方法
		System.out.println("==============");
		System.out.println(student.eat());
		System.out.println(student.sleep());
		System.out.println(student.sport());
		// 继承父类非抽象方法
	}
}

控制台输出:

老师吃饭
老师睡觉
生命在于运动
==============
学生吃饭
学生睡觉
生命在于运动

总结

以上就是本文关于java编程abstract类和方法详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

java中staticclass静态类详解

Java压缩文件工具类ZipUtil使用方法代码示例

Java编程关于子类重写父类方法问题的理解

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • Java同步框架AbstractQueuedSynchronizer详解
  • Java abstract class 与 interface对比
  • Java程序开发中abstract 和 interface的区别详解
  • Java final static abstract关键字概述
  • java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法
  • Java修饰符 abstract,static,final 的区别详解
  • java abstract class interface之间的区别介绍
(0)

相关推荐

  • java abstract class interface之间的区别介绍

    含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的.abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法.如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型. 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须

  • Java程序开发中abstract 和 interface的区别详解

    先给大家说下基本概念 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理解.对于设计意

  • java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法

    读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件转换为 dom树形结构,通过节点进行遍历. 这是W3c关于节点的概念 如果xml中包含有大量的数据,由于dom一次性把xml装入内存中的特性,所以dom不适合于包含大量数据的xml解析.当包含有大量xml的时候,用SAX进行解析比较节省内存. 下面是一个运用DOM进行解析xml文件的例子: xml文件结构如下: <?xm

  • Java abstract class 与 interface对比

    Java abstract class 与 interface对比 前言 abstract class和interface都是Java用来描述抽象体的,不知道是否有同学跟我一样对这两者的语法层面的区别以及如何选择这两者还存在着疑惑,反正接下来,让我详细介绍一下abstract class和interface. 理解抽象类 在面向对象的概念中,所有的对象都是通过类来描述的.但是反过来却不是这样,并不是所有的类都是用来描述对象的.因为这个类中可能没有足够的信息来描述一个具体的对象,这样的类就是抽象类

  • Java final static abstract关键字概述

    一,抽象类:abstract 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类; 2,抽象类中可以有具体的实现方法; 3,抽象类中可以没有抽象方法; 4,抽象类中的抽象方法必须被它的子类实现,如果子类没有实现,则该子类继续为抽象类 5,抽象类不能被实例化,但可以由抽象父类指向的子类实例来调用抽象父类中的具体实现方法;通常作为一种默认行为; 6,要使用抽象类中的方法,必须有一个子类继承于这个抽象类,并实现抽象类中的抽象方法,通过子类的实例去调用; 二,接口:interfac

  • Java同步框架AbstractQueuedSynchronizer详解

    AbstractQueuedSynchronizer概述 AbstractQueuedSynchronizer是java中非常重要的一个框架类,它实现了最核心的多线程同步的语义,我们只要继承AbstractQueuedSynchronizer就可以非常方便的实现我们自己的线程同步器,java中的锁Lock就是基于AbstractQueuedSynchronizer来实现的.下面首先展示了AbstractQueuedSynchronizer类提供的一些方法: AbstractQueuedSynch

  • Java修饰符 abstract,static,final 的区别详解

    static 表示静态,它可以修饰属性,方法和代码块. 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有.这个属性就是全类公有.(共有的类变量与对象无关,只和类有关). 类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O流把类的文件(字节码文件)读入JVM(java虚拟机),这个过程成为类的加载.JVM(java虚拟机)会通过类路径(CLASSPATH)来找字节码文件. 类变量,会

  • java编程abstract类和方法详解

    抽象类和抽象方法常用知识点: (1)抽象类作为被继承类,子类必须实现抽象类中的所有抽象方法,除非子类也为抽象类. 也就是说,如果子类也为抽象类,可以不实现父类中的抽象方法.但是,如果有一个非抽象类 继承于抽象子类,需要实现抽象子类,抽象子类的抽象父类的所有抽象方法,新帐旧账一起算. (2)抽象类不能用final进行修饰. (3)抽象类不能被实例化,也就是说你用的时候不能通过new关键字创建. (4)抽象类中可以包含抽象方法和非抽象方法,抽象方法没有方法体,也就是没有具体实现, 只是定义了有什么功

  • java.util.ArrayDeque类使用方法详解

    本文为大家介绍了java.util.ArrayDeque类使用方法,供大家参考,具体内容如下 1. ArrayDeque有两个类属性,head和tail,两个指针. 2. ArrayDeque通过一个数组作为载体,其中的数组元素在add等方法执行时不移动,发生变化的只是head和tail指针,而且指针是循环变化,数组容量不限制. 3. offer方法和add方法都是通过其中的addLast方法实现,每添加一个元素,就把元素加到数组的尾部,此时,head指针没有变化,而tail指针加一,因为指针是

  • java 中迭代器的使用方法详解

    java 中迭代器的使用方法详解 前言: 迭代器模式将一个集合给封装起来,主要是为用户提供了一种遍历其内部元素的方式.迭代器模式有两个优点:①提供给用户一个遍历的方式,而没有暴露其内部实现细节:②把元素之间游走的责任交给迭代器,而不是聚合对象,实现了用户与聚合对象之间的解耦. 迭代器模式主要是通过Iterator接口来管理一个聚合对象的,而用户使用的时候只需要拿到一个Iterator类型的对象即可完成对该聚合对象的遍历.这里的聚合对象一般是指ArrayList,LinkedList和底层实现为数

  • 把JSON数据格式转换为Python的类对象方法详解(两种方法)

    JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": "Tom", "Sex": "Male", "BloodType": "A", "Hobbies": ["篮球", "足球"]} 我需要把这个转换为具

  • Java编程Retry重试机制实例详解

    本文研究的主要是Java编程Retry重试机制实例详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下 1.业务场景 应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果:第二步拿到第一步结果或者捕捉异常,如果出现错误或异常实现重试上传逻辑,否则继续逻辑操作. 2.常规解决方案演化 1)try-catch-redo简单重试模式: 包装正

  • Java并发编程之Exchanger方法详解

    简介 Exchanger是一个用于线程间数据交换的工具类,它提供一个公共点,在这个公共点,两个线程可以交换彼此的数据. 当一个线程调用exchange方法后将进入等待状态,直到另外一个线程调用exchange方法,双方完成数据交换后继续执行. Exchanger的使用 方法介绍 exchange(V x):阻塞当前线程,直到另外一个线程调用exchange方法或者当前线程被中断. x : 需要交换的对象. exchange(V x, long timeout, TimeUnit unit):阻塞

  • java 中enum的使用方法详解

    java 中enum的使用方法详解 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 public interface IConstants { String MON = "Mon"; String TUE = "Tue"; String WED = "Wed"; String THU = "Thu

  • Java 读取外部资源的方法详解及实例代码

    Java 读取外部资源的方法详解 在Java代码中经常有读取外部资源的要求:如配置文件等等,通常会把配置文件放在classpath下或者在web项目中放在web-inf下. 1.从当前的工作目录中读取: try { BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("wkdir.txt"))); String str; while ((str = in.readLine())

  • 基于java涉及父子类的异常详解

    java中的异常涉及到父子类的问题,可以归纳为一句话:子类的构造函数抛出的异常必须包含父类的异常,子类的方法可以选择抛出"范围小于等于"父类的异常或不抛出异常. 1. 为什么构造函数必须抛出包含父类的异常? 在<thingking in java>中有这么一段话: 异常限制:当覆盖方法时,只能抛出在基类方法的异常说明中列出的那些异常 异常限制对构造器不起作用,你会发现StormyInning的构造器可以抛出任何异常,而不必理会基类构造函数所抛出的异常.然而因为必须构造函数必

  • Java this 关键字的使用方法详解

    Java this 关键字的使用方法详解 构造方法中的this关键字 构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用.但如果一个类有多个构造方法,可以在一个构造方法中通过this(paras-)来调用其他的构造方法. 使用this来调用其他构造方法有如下几个约束. 1) 只能在构造方法中通过this来调用其他构造方法,普通方法中不能使用. 2) 不能通过this递归调用构造方法,即不能在一个构造方法中通过this直接或间接调

随机推荐