Java抽象类和多态
来源:互联网 发布:淘宝彩票中奖了被改号 编辑:程序博客网 时间:2024/05/22 02:18
一、 抽象类
1. 概述
当多个类出现相同功能,但是功能主体不同,可以抽取,但是只抽取功能定义,不抽取功能主体。
2. 特点
i. 抽象方法一定在抽象类中
ii. 抽象方法和抽象类都必须被abstract修饰
iii. 抽象类不可以用new创建对象,没有意义
abstract class Student
{
abstractvoid study();
void sleep()
{
System.out.println("Zzz...");
}
}
class AbstractDemo
{
publicstatic void main(String [] args)
{
newStudent().study(); //报错!抽象类不能实例化
}
}
iv. 抽象类中的抽象方法要被使用,必须由子类重写其所有的抽象方法后,建立子类对象调用。如果子类只重写了部分抽象方法,那么子类还是一个抽象类。
3. 抽象类跟一般类的区别:
事物该怎么描述还怎么描述,只不过,该事物出现了一些看不懂的(抽象的)东西。
4. 程序示例:学生都学习,但低年级跟高年级学的内容不同
abstractclass Student
{
abstract void study(); //抽象方法不能有主体
voidsleep()
{
System.out.println("Zzz...");
}
}
class BaseStudent
{
voidstudy()
{
System.out.println("basiclesson");
}
}
class AdvStudent
{
void study()
{
System.out.println("advancedlesson");
}
}
二、 接口(interface)
1. 可以初步理解为是,一个特殊的抽象
即当一个抽象类中的方法都是抽象的,那么该类可以通过“接口”的形式表示。
interface Practice
{
public abstract void method01();
public abstract void method02();
}
2. 接口同样不可以创建对象,因为有抽象方法,需要被子类实现(implements),子类对方法采用覆盖,才可以实例化。
3. 接口定义的格式特点:
i. 接口中常见定义:常量,抽象方法
ii. 接口中的成员都有固定修饰符
常量:public static final
方法:public abstact
记住:接口中的成员的权限都是public
4. 接口可以被类 多实现(即一个类可以实现多个接口)
5. 程序示例:
interface MyInterface01
{
publicstatic final int NUM=3;
publicabstract void show();
}
interface MyInterface02
{
publicabstract void method();
}
class Test implementsMyInterface01,MyInterface01
{
publicvoid show(){}
publicvoid method(){}
}
class InterfaceDemo
{
publicstatic void main(String[] args)
{
Test test= new Test();
System.out.println(test.NUM);
System.out.println(MyInterface01.NUM);
System.out.println(Test.NUM);
}
}
6. 接口之间支持多继承
interface A
{
public abstract void run_1();
}
interface B
{
public abstract void run_2();
}
interface C extends A,B //支持多继承
{
public abstract void run_3();
}
interface D
{
public abstract void run_4();
}
class Temp
{
public static void temp(){}
}
//在继承的同时,多实现(implements)
class Demo extends Temp implements C,D
{
public void run_1(){}
public void run_2(){}
public void run_3(){}
public void run_4(){}
}
三、 多态
1. 理解多态:
可以理解为事物存在的多种体现形态,比如:
人:男人,女人 / 小孩,青年,老人
动物:狗,猫,虎,兔
2. 多态概述
i. 多态的体现:父类的引用指向了其子类对象,如
Animal c = new Cat(); c.eat();
ii. 多态的前提:必须是类与类之间有关系,要么继承(extends),要么实现(implements)
iii. 多态的好处:多态的出现大大的提高了程序的扩展性
3. 程序示例:
interface Animal
{
public abstract void eat();
}
class Cat implements Animal
{
public void eat()
{
System.out.println("@eatfish@");
}
public void catchMouse()
{
System.out.println("%捉老鼠%");
}
}
class MutiForms
{
publicstatic void main(String [] args)
{
//多态自始至终都是子类对象在做变化
Animal cat = new Cat();//向上转型,Cat->Animal
cat.eat();
Cat C =(Cat)cat;//向下转型,Animal->Cat
C.catchMouse();
}
4. 多态在代码中的特点:
class Fu
{
int num = 1989;
void founc_1()
{
System.out.println("fufounc_1");
}
void founc_2()
{
System.out.println("fufounc_2");
}
static void founc_4()
{
System.out.println("fufounc_4");
}
}
class Zi extends Fu
{
int num = 2012;
void founc_1()
{
System.out.println("zifounc_1");
}
void founc_3()
{
System.out.println("zifounc_3");
}
static void founc_4()
{
System.out.println("zifounc_4");
}
}
class MutiForms
{
public static void main(String[]args)
{
Zi z = new Zi();
z.founc_1();
z.founc_2();
z.founc_3();
System.out.println("-----------------");
/*
多态中(非静态)成员函数的特点:
成员函数在多态调用时,编译看左边,运行看右边
*/
Fu f = new Zi();
f.founc_1();
f.founc_2();
f.founc_3(); //error
System.out.println("-----------------");
/*
多态中成员变量的特点:
无论编译或运行,都参考左边(引用型变量所属的类)
*/
System.out.println("z.num---"+z.num);
System.out.println("f.num---"+f.num);
System.out.println("-----------------");
/*
在多态中,静态成员函数(同样适用于静态变量)
无论编译或运行,都参考左边(静态方法不需要对象,类名即可调用)
*/
f.founc_4();//founc_4()是静态
z.founc_4();
}
}
- Java抽象类和多态
- java抽象和抽象类
- 【Java】多态和抽象
- java 继承和多态 抽象类和接口
- java 抽象类和接口和多态的使用
- java抽象类和抽象方法
- java抽象类和抽象方法
- java抽象类和抽象方法
- Java抽象类和抽象方法
- java中的抽象类和抽象方法
- java的抽象类和抽象方法
- java抽象类和抽象方法
- java基础--抽象类和抽象函数
- 53 Java 抽象类和抽象方法
- Java的抽象类和抽象方法
- java-抽象类和抽象函数
- Java中的抽象类和抽象函数
- java中的抽象类和抽象方法
- 水平飞舞的图片
- 计算圆的面积和窗体的跳转
- Why It’s Better to Text Than Call in a Mass Emergency
- HDU 1716 排列2
- svn版本控制系统
- Java抽象类和多态
- C++类String的实现代码
- [Hadoop]Pig与Hive的区别
- 自己对IoC(Inversion of Control)的理解
- 黑马程序员_java基础day15
- OpenAL学习笔记(二)---播放音频(*.wav)
- Noj-1441(Babelfish)
- HDU 3177 Crixalis's Equipment
- 微软老将Philip Su的离职信:回首12年职场生涯的心得和随笔