码迷,mamicode.com
首页 > 其他好文 > 详细

多态&抽象&继承

时间:2015-08-17 21:54:32      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

多态

package cn.itcast.extend;
public class ExtendDemo2 {
	public static void main(String[] args) {
		A a=new B();//多条
		System.out.println(a.num);
		a.show();//非静态
		a.say();//静态方法
	}
}
class A{
	int num=10;
	//静态方法
	public static void say(){
		System.out.println("父类"+"A");
	}
	//非静态方法
	public void show(){
		System.out.println("父类"+num);
	}
}
class B extends A{
	int num=20;
	//静态方法
	public static void say(){
		System.out.println("子类"+"B");
	}
	//非静态方法
	public void show(){
		System.out.println("子类"+num);
	}
}
技术分享

关于多态:

成员变量:编译看左边,运行看右边

非静态函数:编译看左边,运行看右边

静态函数:编译看左边,运行看右边

解释上述代码:

A a=new B();父类=子类;

a.num调用的是父类的变量.

a.show()调用的是子类的方法

a.say()调用的是父类的。因为静态变量或者静态函数是随着类的加载而加载的.

抽象类

抽象类的特点:
A:抽象类和抽象方法必须用abstract关键字修饰
B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
C:抽象类不能实例化

因为它不是具体的。
抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?
用于子类访问父类数据的初始化
D:抽象的子类a:如果不想重写抽象方法,该子类是一个抽象类。b:重写所有的抽象方法,这个时候子类是一个具体的类。
抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
Animal a = new Cat();

抽象类的成员特点:
成员变量:既可以是变量,也可以是常量。
构造方法:有。
用于子类访问父类数据的初始化。
成员方法:既可以是抽象的,也可以是非抽象的。
抽象类的成员方法特性:
A:抽象方法 强制要求子类做的事情。
B:非抽象方法 子类继承的事情,提高代码复用性。

一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
A:可以。
B:不让创建对象。


abstract不能和哪些关键字共存?
private 冲突 定义为抽象就是为了让子类重写,因此不能与private共存
final 冲突 定义为final就不能被子类重写,因此不能与final共存
static 无意义 因为如 public static abstract void show();这样定义可以直接被类名.show()调用,但是没有方法体.因此毫无意义可言!

接口:

接口的特点:
A:接口用关键字interface表示
interface 接口名 {}
B:类实现接口用implements表示
class 类名 implements 接口名 {}
C:接口不能实例化
那么,接口如何实例化呢?
按照多态的方式来实例化。
D:接口的子类
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
接口成员特点
成员变量;只能是常量,并且是静态的。
默认修饰符:public static final 你写不写都有
建议:自己手动给出。
构造方法:接口没有构造方法。
成员方法:只能是抽象方法。
默认修饰符:public abstract 你写不写都有
建议:自己手动给出。


所有的类都默认继承自一个类:Object。
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。

那么既然接口没有构造方法,实现类中中构造方法的super()调用的就是Object这个超类中的构造方法

类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。

总结:

抽象类和接口的区别:
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象

B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承

C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

版权声明:本文为博主原创文章,未经博主允许不得转载。

多态&抽象&继承

标签:

原文地址:http://blog.csdn.net/u014010769/article/details/47727931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!