继承-java中到底为什么要用到抽象类?

问题描述

java中到底为什么要用到抽象类?

比如有个类A,把它设置成abstract是为了不让它实例化,只能表示一个抽象的或者不具体的无法实例化的概念,但是就算不在这个A的前面加abstract照样可以实现很多类的继承,那我真的不太理解设置抽象类的意义到底在哪里,请各位不吝赐教!

解决方案

抽象类定义一些有一定关系的类的共同行为,比如一个几何图形类,几何图形包括多种图形,如,正方形,圆形,矩形,三角形等,而每种图形用有各自的面积周长计算公式,所以可以在几何图形类里抽象这些公共方法,而不提供真正方法(也没法提供,所以只能是抽象了)。之后各种图形都可以进行面积周长的比较,总不能重载很多个比较函数,所以这时就可以定义一个比较函数,参数类型是父类,这样这些图形就都可以进行比较了。而在比较函数里,由于多态,对象会调用自己独特的面积周长计算函数。

解决方案二:

本身不允许被实例化,有的方法不好实现,本身实例化没有意义

比如说抽象流,你说怎么实现呢?

但是不同于接口,抽象类可以编写一些代码,有时候虽然做什么不确定,但是做的流程是确定的,这些代码可以先写起来。

解决方案三:

因为抽象类是一种概念,没有对应的实例(即不能定义成对象的实例)

例如定义抽象类车,只是抽取了车的共性,但此抽象类没有实例的车可以对应。这只是一种为了与现实对应的定义方法,你不用抽象关键字,你定义的类就可以实例化。但是实例化后,定义出来的实例没有实用价值。

解决方案四:

比如shape类有一个方法叫getarea

解决方案五:

二十、java的抽象类

时间: 2024-10-29 19:32:28

继承-java中到底为什么要用到抽象类?的相关文章

做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处

做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{             //动物的接口    public void eat(Food food); //接口中只有抽象的方法和静态常量!这里void前面省略了abstract.同样,变量可以省略static final} class Cat implements Animal //一种动物类:猫  {      public void eat(Food food) //这里是对

继承-java中a是b的父类,b是c的父类,那a是c的父类吗

问题描述 java中a是b的父类,b是c的父类,那a是c的父类吗 java中a是b的父类,b是c的父类,那a是c的父类吗 子类继承父类,是不是共享了父类的所有变量和方法,即使子类没有重写或者重载,可以直接调用父类的变量 解决方案 没错,当子类继承父类,你可以想象一个大箱子包了一个小箱子,大箱子也就是子类可以访问小箱子的所有非private属性和方法.当子类当了别的类的父类,又有一个更大的箱子把前两个箱子包含了进来,当然可以访问前两个箱子中的非private属性和方法 解决方案二: c也是a的子类

Java中的字符集编码入门(五) Java代码中的字符编码转换

如果你是JVM的设计者,让你来决定JVM中所有字符的表示形式,你会不会允许使用各种编码方式的字符并存? 我想你的答案是不会,如果在内存中的Java字符可以以GB2312,UTF-16,BIG5等各种编码形式存在,那么对开发者来说,连进行最基本的字符串打印.连接等操作都会寸步难行.例如一个GB2312的字符串后面连接一个UTF-8的字符串,那么连接后的最终结果应该是什么编码的呢?你选哪一个都没有道理. 因此牢记下面这句话,这也是Java开发者的共同意志:在Java中,字符只以一种编码形式存在,那就

类的继承-继承问题中的Has_A和Is_A的关系到底是怎么样的?

问题描述 继承问题中的Has_A和Is_A的关系到底是怎么样的? 新手刚学java,还不是很懂.想问图中a[1] 为什么不能用bark(),语录3怎么错了?语句6运行为什么会出错? 解决方案 IS--A基于类继承或接口实现,IS-A是表达这句话的一种方式:"这个东西是那个东西的一种".例如:野马是一种马.(是一个) HAS-A关系是基于用法(即引用)而不是继承.换句话说,如果类A中的代码具有对类B实例的引用,则"类A HAS-A类B".例如:马有缰绳.(有一个) &

java中方法的重写概念是相对于父类和子类的,那么同一个类到底有没有重写的概念呢

问题描述 java中方法的重写概念是相对于父类和子类的,那么同一个类到底有没有重写的概念呢 java中方法的重写概念是相对于父类和子类的,那么同一个类到底有没有重写的概念呢 解决方案 重写是在有继承关系的多个类之间,子类有与父类相同声明的方法但是方法体不同,即子类重写了父类的某些方法. 所以同一个类中显然是没有重写的概念的. 解决方案二: 没有,重写是在有继承关系的两个类中发生的. 解决方案三: 同一个类中只有重载,继承关系之间的类叫重写 解决方案四: 没有的,本类只有重载方法. 解决方案五:

对于Java中的接口实现多继承的疑问

问题描述 目前的理解接口:Interface   的作用就是包含一些抽象方法   然后再其他类中implement接口并override这些抽象方法        感觉纯粹只为了达到统一的方法名访问而作这么个抽象方法,跟直接在类中创建这么一个方法没啥区别      如果要做到像extend那样不重写方法就能使用父类的方法,Interface还是不行啊   实现的多继承也就变成了重写多个接口中的抽象方法,没有那层继承的意义啊 解决方案 嘿嘿,看看大师们是怎么用interface的.多看看设计模式,

Java中继承、多态、重载和重写介绍_java

什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型.继承是面向对象的三个基本特征--封装.继承.多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类.超类),如果

动态-JAVA 中Null值到底是什么

问题描述 JAVA 中Null值到底是什么 public class test { public static void main(String[] args) throws Exception { Temp temp = new Temp(); temp.test("1"); temp.test(null); } } public class Temp { public void test(Object a){ System.out.println("test Object

JAVA 【引用类型】和【对象类型】在【继承】中的异同

介绍     JAVA [引用类型]和[对象类型]在[继承]中的异同,这个问题自己整理过N次,也被人当菜鸟问过N次.所以,在此简单整理一下,以供大家分享. 在继承关系中,一般成员变量是根据引用类型 在继承关系中,静态成员变量是根据引用类型 在继承关系中,一般方法是根据对象类型 在继承关系中,静态方法是根据引用类型 注意     静态成员变量,静态方法是基于类的,本文为了测试观察,所以,会用对象去引用静态成员变量和静态方法.      Super Class: package shuai.stud