java 8-5 抽象

1、 抽象类的概述:
动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的。
我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类。

抽象类的特点:
A:抽象类和抽象方法必须用abstract关键字修饰,抽象方法不能有主体
B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
C:抽象类不能实例化
因为它不是具体的。
抽象类有构造方法,但是不能实例化。
构造方法的作用是什么呢?
用于子类访问父类数据的初始化
D:抽象的子类
a:如果不想重写抽象方法,该子类是一个抽象类。
b:重写所有的抽象方法,这个时候子类是一个具体的类。

抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
Animal a = new Cat();

 1 //abstract class Animal //抽象类的声明格式
 2 abstract class Animal {
 3 //抽象方法
 4 //public abstract void eat(){} //空方法体,这个会报错。抽象方法不能有主体
 5 public abstract void eat();
 6
 7 public Animal(){}
 8 }
 9
10 //第一种:子类是抽象类
11 abstract class Dog extends Animal {}
12
13 //第二种:子类是具体类,重写抽象方法
14 class Cat extends Animal {
15 public void eat() {
16 System.out.println("猫吃鱼");
17 }
18 }
19
20 class AbstractDemo {
21 public static void main(String[] args) {
22 //创建对象
23 //Animal是抽象的; 无法实例化
24 //Animal a = new Animal();
25 //通过多态的方式
26 Animal a = new Cat();
27 a.eat();
28 }
29 }

2、 抽象类的成员特点:
成员变量:既可以是变量,也可以是常量。
构造方法:有。
用于子类访问父类数据的初始化。
成员方法:既可以是抽象的,也可以是非抽象的。

抽象类的成员方法特性:
A:抽象方法: 强制要求子类做的事情。//子类不用就报错。
B:非抽象方法 :子类继承的事情,提高代码复用性。

 1 abstract class Animal {
 2 public int num = 10;
 3 public final int num2 = 20;
 4
 5 public Animal() {}
 6
 7 public Animal(String name,int age){}
 8
 9 public abstract void show();
10
11 public void method() {
12 System.out.println("method");
13 }
14 }
15
16 class Dog extends Animal {
17 public void show() {
18 System.out.println("show Dog");
19 }
20 }
21
22 class AbstractDemo2 {
23 public static void main(String[] args) {
24 //创建对象
25 Animal a = new Dog();
26 a.num = 100;
27 System.out.println(a.num);
28 //a.num2 = 200;
29 System.out.println(a.num2);
30 System.out.println("--------------");
31 a.show();
32 a.method();
33 }
34 }

3、 面试题:
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
A:可以。
B:不让创建对象。 只能通过访问它的子类来使用这个对象

abstract不能和哪些关键字共存?
private :冲突 ,private私有被继承,不能被重写;而abstract继承要求被重写,所以冲突
final :冲突, final的变量是最终的变量,不能被重写,同上
static :无意义,  abstract的方法是没有方法体的,而static静态是通过类名访问方法体的,但是。访问一个没有方法体的方法,没意义的

 1 abstract class Fu {
 2 //public abstract void show();
 3 //非法的修饰符组合: abstract和private
 4 //private abstract void show();
 5
 6 //非法的修饰符组合
 7 //final abstract void show();
 8
 9 //非法的修饰符组合
10 static abstract void show();
11
12 public static void method() {
13 System.out.println("method");
14 }
15 }
16
17 class Zi extends Fu {
18 public void show() {}
19 }
20
21 class AbstractDemo3 {
22 public static void main(String[] args) {
23 Fu.method();
24 }
25 }
时间: 2024-09-30 07:56:35

java 8-5 抽象的相关文章

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

Java设计模式之抽象工厂(02)

对工厂方法进行抽象.当增加新的产品时,不用改动工厂类.而是集成已有的工厂接口或者抽象工厂,创建新的工厂.这就是对扩展开发,对修改封闭. 1 package Pak; 2 3 public abstract class Automobile { 4 public abstract void Run(); 5 } package Pak; public class Bus extends Automobile { @Override public void Run() { System.out.pr

79.JAVA编程思想——抽象应用

79.JAVA编程思想--抽象应用 1     抽象应用 接下来该考虑一下设计方案剩下的部分了--在哪里使用类?既然归类到垃圾箱的办法非常不雅且过于暴露,为什么不隔离那个过程,把它隐藏到一个类里呢?这就是著名的"如果必须做不雅的事情,至少应将其本地化到一个类里"规则. 现在,只要一种新类型的Trash 加入方法,对TrashSorter 对象的初始化就必须变动.可以想象,TrashSorter 类看起来应该象下面这个样子: class TrashSorter extends Vecto

JAVA设计模式之抽象工厂模式 (转)

前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例. 例子背景: 随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件.于是这个工厂开始生产空调和发动机,用来组装汽车.这时候工厂有两个系列的产品:空调和发动机.宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号发动机. 概念: 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象.比如宝马320系列使用空调型号A和发动机型号A,而宝

Java中的抽象

以下内容引用自http://wiki.jikexueyuan.com/project/java/abstraction.html: Abstraction是指在OOP中让一个类抽象的能力.一个抽象类是不能被实例化的.类的功能仍然存在,它的字段,方法和构造函数都以相同的方式进行访问.只是不能创建一个抽象类的实例. 如果一个类是抽象的,即不能被实例化,这个类如果不是子类它将没有什么作用.这体现了在设计过程中抽象类是如何被提出的.一个父类包含子类的基本功能集合,但是父类是抽象的,不能自己去使用功能.

浅谈JAVA设计模式之——抽象工厂模式(AbstractFactoty)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45440309 一.概述: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 二.为何使用     工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也

Java设计模式之——抽象工厂

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类.每个生成的工厂都能按照工厂模式提供对象. 步骤 1 为形状创建一个接口. 1 packagecom.demo.mode.mode01.abstractFactory.Shape.java 2 3 public interface

黑马程序员---java基础-Java类 继承&抽象&接口

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.继承 继承是所有OOP语言不可缺少的部分,在java中使用extends关键字来表示继承关系.当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承.比如下面这段代码: 1 class Person { 2 public Person() { 3 4 } 5 } 6 class Man extends Person { 7 public Man()

【并发编程】JMM:java内存模型抽象

本文试图向大家解释清楚JMM及其抽象模型,但不仅仅是一个介绍,更希望能讲清楚JMM内存模型抽象的原因. 一.JMM的概念: 二.JMM的抽象将内存内存模型分成线程私有的本地内存和所有线程共享的主存: 三.JMM抽象模型造成了并发编程中共享变量的内存可见性问题,为什么会造成?选择这样的抽象模型有什么好处?有什么样的方法来处理这个问题? 一.JMM JMM直译过来就是java内存模型(java memory model),他的更深层次的描述,"JMM是一个语言级的内存模型,通过屏蔽各个系统平台的差异

JAVA——多态和抽象

多态和抽象从继承引出来的两个重要的概念,多态允许以多种形式存在,而抽象则允许创建抽象类. 在Java中,多态有两种理解方式:第一种是对象的不同的方法可以用相同的一个方法名,也就是重载的概念.另一种是同一对象根据不同的消息执行相应的行为,也可以这样认为发送消息给某一对象,让对象自行选择哪种相应的行为.根据这两种方式,所以多态分为静态多态和动态多态: ■静态多态指的是程序在编译时,系统就能决定调用哪个方法,所以也称为编译时多态.在Java中,静态多态实现的方法就是方法重载,其调用规则是依据对象在定义