黑马程序员-继承、接口与多态

------- android培训java培训、期待与您交流!---------
一、继承
1.概述
继承是面向对象的一个重要特征。当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可。这时,多个类可以称为子类,单独的这个类称为父类或者超类。例如:宝马和奔驰都是轿车类,那么就可以说描述奔驰这个对象创建的类,是子类;而描述轿车类这个对象创建的类,就是父类。

这样类与类之间就存在了继承的关系。子类可以直接访问父类中的非私有的属性和行为。在代码中通过extends关键字表示继承关系。例:

            class Son extends Father{}  //这也是在代码中的书写格式。

2、特点

        1、提高了代码的复用性。

        2、让类与类之间产生了关系。有了这个关系,提供了多态的前提。

3、Java语言中,只支持单继承,不支持多继承。例:一个儿子只能有一个父亲。可以多层继承。也就是一个继承体系。

例:class Gran{} 

class Father extends Gran{}

           class Son extendsFather{}

3、实例应用

class Fu {//定义父类
//属性为名字和年龄
String name;
int age;
//在构造函数中对名字和年龄进行初始化
Fu(String name, int age) {
this.name = name;
this.age = age;
System.out.println(name + "," + age);
}
//Fu都具有说话的功能
void speak() {
System.out.println("fu speak java language");
}
}
//定义子类,继承父类
class Zi extends Fu {
///super关键字表示父类,因为姓名和年龄在父类中进行了初始化动作,在这里可以直接调用
Zi(String name, int age) {
super(name, age);

super.speak();
}
//子具有说话的功能
void speak() {
System.out.println("zi java language");
}
}
class Test10 {
public static void main(String[] args) {
Zi z = new Zi("zhangsan", 20);
z.speak();
}
}

输出结果:

zhangsan,20
fu speak java language
zi java language

总结:在子类中可以连同初始化父类构造方法来完成子类初始化操作,既可以在子类 的构造方法中使用super()语句调用父类的构造方法,也
可以在子类中使用super关键字调用父类的成员方法等

二、多态


利用多态可以是程序有良好的扩展性,并可以对所有类进行通用的处理
实例:
需求:定义一个平行四边形的类Parallelogram,在类中定义一个draw()方法
class Parallelogram{
//实例化保存平行四边形对象的数组对象
public void draw(Parallelogram p){
//定义一个draw()方法,参数为本类对象
//绘图
}
}
例2、
bstract class Animal {//定义一个抽象父类
public abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void catchMouse() {
System.out.println("抓老鼠");
}
}
class Test10 {
public static void main(String[] agrs) {
Animal a = new Cat();//向上转型,这样猫就有了吃的方法
a.eat();//调用吃鱼方法
Cat c = (Cat) a;//向下转型:将父类对象赋予子类对象,并强制转换成子类对象,也就是将抽象类转换成具体类
c.catchMouse();//调用抓老鼠的方法
}
}
三、接口


一、概述

      接口,可以被认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。接口使用interface来表示,子类中用implements实现。格式为:

         interface 接口名{}   

        子类名 implements接口名{}

格式特点:

       1、接口中常见定义:常量,抽象方法。

       2、接口中的成员都有固定修饰符。

               常量:public static final

              方法:public abstract

       3、接口中的成员都是public的。

在使用中,常量可以不写public static final,方法可以不写public abstract,编译时Java会自动添加这些修饰符,因为这是固定的格式修饰符。但为了方便阅读,通常都写上。

 

二、特点

        1、接口是对外暴露的规则。

       2、接口是程序的功能扩展。

       3、接口的出现降低耦合性。

       4、接口可以用来多实现。这也是对多继承不支持的转换形式。java支持多实现。

       5、类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。

        6、 接口与接口之间可以有继承关系。而且可以多继承。

注:1、接口不可以创建对象的,因为有抽象方法。需要被子类实现(implements),子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。

              2、实现多个接口时,接口中不可以有返回不同类型的同名抽象函数。这样子类实现时将不能复写。

 

三、接口与抽象类

       共性:都是不断向上抽取出来的抽象的概念。

       区别:

                1、抽象类体现继承关系,一个类只能单继承。

                    接口体现实现关系,一个类可以多实现。同时接口与接口之间有继承关系。

                2、抽象类是继承,是 "is a "关系。

                    接口是实现,是 "like a"关系。

                3、抽象类中可以定义非抽象方法,供子类直接使用。

                    接口的方法都是抽象,接口中的成员都有固定修饰符。

                4、抽象类中可以私有变量或方法。

                    接口中的常量和方法都是public修饰的权限。

实例应用:

//定义一个电脑接口
interface PCI
{
public void run();//
public void close();
}
class MainBoard //电脑主板
{
public void run()
{
System.out.println("主板运行");
}
public void UsePCI(PCI p)//主板使用PCI接口
{
if (p!=null)//判断接口是否为空,如果不为空则开启接口的功能
{
p.run();
p.close();
}
}
}
class NetCard implements PCI  //实现PCI接口,复写PCI的方法
{
public void run() //复写run()方法,让网卡运行
{
System.out.println("网卡运行");
}
public void close()//复写close()方法,让网卡关闭
{
System.out.println("网卡关闭");
}
}
class SoundCard implements PCI//实现PCI接口,复写PCI的方法
{
public void run()//复写run方法,让声卡运行
{
System.out.println("声卡运行");
}
public void close()//复写close()方法,让声卡运行
{
System.out.println("声卡关闭");
}
}
class
Demo
{
public static void main(String[] args)
{
MainBoard mb=new MainBoard();//建一个主板电脑
mb.run();//运行电脑
mb.UsePCI(new NetCard());//通过电脑主板可以连接接口,通过接口连接网卡来实现开启网卡,关闭网卡的功能
mb.UsePCI(new SoundCard());//通过电脑主板可以连接接口,通过接口连接网卡来实现开启声卡,关闭声卡的功能

}
}




------- android培训java培训、期待与您交流!---------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值