面向对象---抽象类

原创 2018年04月17日 17:22:45

一、抽象类的概念

Java中,如果一个类中有一个方法声明(抽象方法)抽象功能,那么这个类定义为抽象类

关键字:abstract  

抽象类的特点:抽象类不能直接实例化!(不能创建对象) 接口也不能实例化

  关于抽象类:

1)如果一个类中有抽象方法,那么这个类是一定是一个抽象类

2)抽象类中不一定都是抽象方法

   抽象类的子类

1)如果子类是抽象类,没有意义,因为都不能实例化,对象如何创建

2)子类具体类,那么子类必须实现父类中的抽象功能.

具体代码:

//抽象的动物类
abstract class Animal{
	
	//提供一个抽象方法(只是一个声明)
	public abstract void eat() ;  //抽象功能,没有方法体,需要子类实现抽象类的这个功能
	
	//非抽象功能
	public void method() {
		
	}
}
//具体的动物类
class Cat extends Animal{
	//实现抽象类的方法
	@Override
	public void eat() {
		System.out.println("猫吃鱼....");
	}
}
class Dog extends Animal{

	@Override
	public void eat() {
		System.out.println("狗吃骨头....");
	}	
} 
//测试类
public class AbstractDemo {
	public static void main(String[] args) {
		Animal a = new Cat() ;
		Animal a2 = new Dog() ;
	}
}

二、抽象类的成员特点

抽象类的成员特点:
   成员变量:可以是变量,也是一个常量
  构造方法:可以有无参,可以有有参,作用:给对象进行初始化的.
  成员方法:可以有抽象方法,还可以有非抽象方法...

  abstract和哪些关键字是冲突的,不能共有!
  abstract 和private
abstract 和final

abstract和static 

举个例子体现一下:

//抽象的人类
abstract class Person{
	
//	private abstract void function() ;
//	public final abstract void function() ; .//错误的,非法的 
//	public static abstract void function() ;//非法的
	
	private String name ;
	int num = 10 ; //变量
	public final int num2 = 100 ;//常量
	
	//无参构造
	public Person() {
		
	}
	
	//有参构造
	public Person(String name) {
		this.name = name ;
	}
	
	//非抽象的功能
	public void show() {
		System.out.println(num);
		System.out.println(num2);
	}
	
	//抽象功能
	public abstract void method();
}
//学生类
class Student extends Person{

	@Override
	public void method() {
		System.out.println("method student...");
	}
	
}
//测试类
public class AbstractDemo2 {
	
	public static void main(String[] args) {
		
		//创建对象
		Person p = new Student();  //=号左边:抽象类  =号右边:具体类		形式:抽象类多态..
		p.show();
		p.method();
	}
}

大家可以试着用抽象类来练习一下猫狗案例:

提示:Animal类定义为抽象类,Cat和Dog类定义为具体的实现类,且继承Animal类

-------------------------------------华丽分割线--------------------------------------

具体代码:

/**
 * 抽象的动物类
 * @author Administrator
 *
 */
public abstract class Animal {

	private String name ;
	private int age ;
	
	public Animal() {
		super();
	}

	public Animal(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	//抽象功能
	public abstract void eat() ;
	
}
//具体猫类
public class Cat extends Animal {
	
	

	public Cat() {
		super();
	}

	public Cat(String name, int age) {
		super(name, age);
	}

	@Override
	public void eat() {
		System.out.println("猫吃鱼...");
	}
	
	//自己的功能
	public void playGame() {
		System.out.println("会玩毛线...");
	}

}

//狗类
public class Dog extends Animal {
	
	

	public Dog() {
		super();
	}

	public Dog(String name, int age) {
		super(name, age);
	}

	@Override
	public void eat() {
		System.out.println("狗吃骨头...");
	}
	
	public void lookDoor() {
		System.out.println("会看门...");
	}

}

//测试类
public class AnimalDemo {

	public static void main(String[] args) {
		
		//测试猫类
		//方式1:无参/set
		Animal a = new Cat() ; //抽象类多态
		a.setName("TOM");
		a.setAge(5);
		System.out.println("猫的姓名是:"+a.getName()+",年龄是:"+a.getAge());
		a.eat();
//		a.playGame() ;
		
		//要么向下转型,要么具体类创建具体类   
		Cat c = (Cat)a;
		c.playGame();
		
		
		System.out.println("------------------------");
		
		//方式2:带参构造创建对象 (具体类创建具体类对象)
		Cat c2 = new Cat("TOM", 3) ;
		System.out.println("猫的姓名是:"+c2.getName()+",年龄是:"+c2.getAge());
		c2.playGame();
		c2.eat();
		
		
	}
}


面向对象_抽象类的特点

/* 抽像类的概述: 动物不应该定义为具体的东西,面且动物中的吃,睡等也不应该是具体的。 我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类。 抽象类...
  • L1585931143
  • L1585931143
  • 2016-10-07 14:22:34
  • 320

面向对象_抽象类的成员特点

/* 抽象类的成员特点: 成员变量:既可以是变量,也可以是常量 构造方法:有。 用于子类访问父类的数据初始化。 成员方法:既可是抽象的,也可以是非抽象的。 抽象类的成员方...
  • L1585931143
  • L1585931143
  • 2016-10-07 21:34:59
  • 977

面向对象中接口和抽象类的区别

从表象上来说: 1、抽象类可以给出一些成员的实现,接口却不包含成员的实现; 2、抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现; 3、一个类只能继承一个抽象类,但可以实现多...
  • u010784236
  • u010784236
  • 2015-01-23 17:53:49
  • 1731

面向对象(多态,抽象类,接口的比较)

(一)面向对象(多态) 多态概述: 多态实质上是同一个对象相应不同消息的能力,你理解不了也可以把它理解为事物存在的多种形态. 当然了能够理解实质当然更好. 多态的前提: 要有继承关系, 要有方法重...
  • tongzhengtong
  • tongzhengtong
  • 2015-09-10 23:32:48
  • 1706

面向对象_抽象类练习猫狗案例

/* 猫狗案例: 具体事物:猫、狗 共性:姓名、年龄、吃饭 分析:从具体到抽象 猫: 成员变量:姓名、年龄 构造方法:无参、带参 成员方法:吃饭(猫吃鱼) ...
  • L1585931143
  • L1585931143
  • 2016-10-07 22:23:59
  • 636

[drp 6]接口和抽象类的区别,及其应用场景

导读:在很多时候,接口和抽象类可以替换。发现这个问题,还是之前学习设计模式的时候,看到那个UML图发现的。那么,究竟在什么时候使用接口,什么时候使用抽象类呢?现在结合这个项目,做一个总结。 ...
  • u013034889
  • u013034889
  • 2016-05-23 21:30:05
  • 769

PHP面向对象基础概念(抽象方法和抽象类)

在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口。而抽象方法就是为了方便继承而引入的,我们先来看一下抽象类和抽象方法的定义再说明它的用途。 什么是抽象方...
  • PHPwhite
  • PHPwhite
  • 2015-06-15 23:40:00
  • 2643

PHP中抽象类与接口的应用场景

/***   ====笔记部分====   接口的具体语法:   0:以人类为, class Human 是人的草图   而接口 是零件   可以用多种零件组合出一种新特种来.   1: ...
  • hanliuxinming
  • hanliuxinming
  • 2014-03-10 01:02:08
  • 1447

C++面向对象编程(九)抽象类

纯虚函数 纯虚函数说明形式: virtual 类型  函数名(参数表) =  0; 一个函数含有纯虚函数的基类称为抽象类。 纯虚函数为各派生类提供一个公共界面(接口的封装和设计...
  • Winge_Fish
  • Winge_Fish
  • 2015-07-28 12:17:55
  • 439

java面向对象(三)之抽象类,接口

java类  java类分为普通类和抽象类,接口,上一节我大概讲了java类的一般格式,今天将抽象类和接口。同时讲一下它们是怎样存储的。  最重要的是理解为什么要有抽象和接口,这样学下来你猜不会迷茫,...
  • Liveor_Die
  • Liveor_Die
  • 2017-09-07 15:27:58
  • 315
收藏助手
不良信息举报
您举报文章:面向对象---抽象类
举报原因:
原因补充:

(最多只允许输入30个字)