12-14java面向对象之抽象类&接口

抽象类

1.抽象类概念

抽象类:包含抽象方法的类,相比于普通类,他多了一个抽象方法。

抽象方法:只声明但是没有实现的方法,用abstract关键字来定义。

未实现的举例:

class A
{
	private String name ;
	public void print()
}

在类中声明的方法,有{}则说明有方法体,则实现;没有{},则未实现。

2.使用规则

包含一个抽象方法的类必须是抽象类

抽象类和抽象方法都使用abstract关键字声明

抽象方法只需要声明不需要实现

抽象类必须被子类继承,子类(不是抽象类)必须覆写全部的抽象方法

3.定义格式

abstract class A
{
	private String name ;
	public abstrct void print();
}

给出实例化代码

//本例是对抽象类的测试
abstract class A
{
	public static final String flag = "china" ;
	private String name  = "Tyrion";
	public String getName()
	{
		return this.name;
	}
	public abstract void print();
}
//继承并覆写
class B extends A
{
	public void print()
	{
		System.out.println("flag = " + flag + ",姓名:" + getName());
	}
}
public class TestAbstract
{
	public static void main(String[] args)
	{
		B b = new B();
		b.print();
	}
}

4.注意问题

4.1

Final定义类不能有子类,但是抽象类定义之后必须有子类,所以抽象类不能与final共存。

final abstract class A
{
	public static final String flag = "china" ;
	private String name  = "Tyrion";
	public A()
	{
		System.out.println("抽象类的构造方法");
	}
	public String getName()
	{
		return this.name;
	}
	public abstract void print();
}

TestAbstract.java:2: 错误: 非法的修饰符组合: abstract和final

final abstract class A

^

TestAbstract.java:17: 错误: 无法从最终A进行继承

class B extends A                ^

4.2

抽象类也是类,存在构造方法。

//本例是对抽象类的测试
abstract class A
{
	public static final String flag = "china" ;
	private String name  = "Tyrion";
	public A()
	{
		System.out.println("抽象类的构造方法");
	}
	public String getName()
	{
		return this.name;
	}
	public abstract void print();
}
//继承并覆写
class B extends A
{
	public B()
	{
		super();
		System.out.println("子类的构造方法");
	}
	public void print()
	{
		System.out.println("flag = " + flag + ",姓名:" + getName());
	}
}
public class TestAbstract
{
	public static void main(String[] args)
	{
		B b = new B();
		b.print();
	}
}

2.接口

1.接口的概念

接口是一种特殊类,在接口中,包含全局常量和公共抽象方法。

格式:

Intterface 接口名称{

Public static fianl xxx

Public abstrac xxx

}

//本例是对接口的测试
interface A
{
	public static final String NAME ="Tyrion";
	public abstract void print();
}
public class TestAbstract
{
	public static void main(String[] args)
	{

	}
}

2.接口的实现

由于接口中有抽象方法,所以要通过子类使用implements关键字来实现接口(可以实现多个接口),在子类中要全部覆写抽象方法。

格式:

Class A   implements 接口1,接口2  {}

//本例是对接口的测试
interface A		//定义接口A
{
	public static final String NAME ="Tyrion";
	public abstract void print();
}
interface B		//定义接口B
{
	public abstract void say();
}
class C implements A,B		//子类C实现接口A,B
{
	public void print()
	{
		System.out.println("hello");
	}
	public void say()
	{
		System.out.println("world");
	}
}
public class TestAbstract
{
	public static void main(String[] args)
	{
		C c =new C();	//实例化子类对象
		c.print();
		c.say();
	}
}

一个子类(不是抽象类)既可以继承抽象类,也可以实现接口。

格式

Class 子类 extends 抽象类 implements 接口1....{}

//本例是对接口的测试
interface A		//定义接口A
{
	public static final String NAME ="Tyrion";
	public abstract void printA();
}
interface B		//定义接口B
{
	public abstract void printB();
}
abstract class C		//定义抽象类
{
	public abstract void printC();
}
class D extends C implements A,B		//子类D实现接口A,B并且继承抽象类C
{
	public void printA()			//覆写所有的抽象方法
	{
		System.out.println("接口A");
	}
	public void printB()
	{
		System.out.println("接口B");
	}
	public void printC()
	{
		System.out.println("接口C");
	}
}
public class TestAbstract
{
	public static void main(String[] args)
	{
		D d =new D();	//实例化子类对象
		d.printA();
		d.printB();
		d.printC();
	}
}
				
时间: 2024-12-24 18:56:19

12-14java面向对象之抽象类&接口的相关文章

8 面向对象之抽象类+接口+内部类

1 final关键字 用法:  1)使用final修饰变量,该变量就变成常量,在运行的过程中无法重新赋值. 2)使用final修饰方法,该方法无法在子类中重写 3)使用final修饰的类,不能被继承(派生其他子类) JDK中常见的final修饰的类: java.lang.Math   java.lang.String 2 抽象类和抽象方法 抽象方法:使用abstract修饰的方法.特征: 没有方法体. 抽象类:使用abstract修饰的类. 特点: 1)抽象类中可以包含抽象方法.包含抽象方法的类

06 面向对象:多态&抽象类&接口&权限修饰符&内部类

多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父类),运行看左边(父类). * 成员方法 * 编译看左边(父类),运行看右边(子类).动态绑定 * 静态方法 * 编译看左边(父类),运行看左边(父类). * (静态和类相关,算不上重写,所以,访问还是左边的) * 只有非静态的成员方法,编译看左边,运行看右边 */ class Demo_Polym

面向对象的理解 抽象类&接口

一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu,显卡,主板,电源,风扇,把这些都通过主板链接到一起.我需要清楚的知道主机组装的每一个步骤. 介绍了面向过程,再说会正题,什么是面向对象?对于上面的装主机过程面向对象会把主机先抽象成一个机箱,机箱里有cpu,显卡,主板,电源.用主机的人,不关心里面是怎么工作的,也不需要知道内部逻辑,只知道插上电源就能用.面

黑马程序员_面向对象之抽象类与接口

抽象类(abstract)???? 当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的放过,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了. 抽象类概念 当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而

面向对象多态之接口

申明下:我也是新手,以下如有不对或不合适的地方望指出,一起交流O(∩_∩)O哈! 好了,转入正题 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Interface 7 { 8 class InterfaceTest 9 { 10 static void Main(string[] args) 11 { 12 #region 测试

Java面向对象作业-用接口方式测试向下转型

Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: 1 package com.java1234.chap03.sec13; 2 3 public class Test2 { 4 5 public static void main(String[] args) { 6 People p1=new Student(); 7 p1.say(); 8 9 Student student=(Student) p1; 10 student.say(); 11

面向对象(抽象类)

抽象类:抽象类,只为继承而出现,不定义具体的内容,只规定该有哪些东西:一般抽象类中只放置抽象方法, 1.关键字 abstract 2.抽象类可以包含抽象方法和普通方法3.abstract关键字可以把方法变为抽象方法,抽象方法可以没有函数体4.抽象类无法被实例化,抽象类主要做为一个基类,让其他类继承.5.abstract关键字和sealed关键字(禁止继承)不能同时出现6.如果一个子类继承自抽象类,那么子类中必须实现所有的抽象方法7.如果子类中没有实现父类的抽象方法,那么该子类必须是抽象类8.如果

普通类 抽象类 接口

首先得搞懂什么是抽象类:一.概念:    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.    比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆.三角形这样一些具体概念.它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念.正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的

虚函数/纯虚函数/抽象类/接口/虚基类

1.多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 在Java中,没有指针,就直接用父类实例化子类对象 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的,多态可以让父类的指针有“多种形态”,这是一种泛型技术. 所谓泛型技术,就是试图使用不变的代码来实现可变的算法 2.虚函数 在基类的类定义中,定义虚函数的一般形式: Virtual 函数返回值类型 虚函数名(形参表){ 函数