Java基础——接口和抽象类

Java基础——接口和抽象类

一、抽象类的写法和作用范围:

1.随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更通用。
2.类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类
3.用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。
在这里插入图片描述**抽象方法:**只有方法的声明,没有方法的实现。以分号结束。
abstract int abstractMethod1( int a );
含有抽象方法的类必须被声明为抽象类。
抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。或
Abstract不能用来修饰属性、构造器、private、static、final。

abstract class A{   
	   abstract void m1( );
	   public void m2( ){
	   	   System.out.println("A类中定义的m2方法");
	   }
}

class B extends A{
	   void m1( ){
	   	   System.out.println("B类中定义的m1方法");
	   }
}

public class Test{
	   public static void main( String args[ ] ){
	   	   A c = new B( );
	   	   c.m1( );
	   	   c.m2( );
	   }
}

抽象类VS一般类
1.相同点:

抽象类和一般类都是用来描述事物的,都在内部定了成员。
2.不同点:
一般类有足够的信息描述事物;抽象类描述事物的信息有可能不足。
一般类中不能定义抽象方法,只能定非抽象方法。抽象类中可定义抽象方法,同时也可以定义非抽象方法。
一般类可以被实例化。抽象类不可以被实例化。
注意:
不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法

在这里插入图片描述

二、抽象类应用

抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。
在这里插入图片描述解决方案:
在这里插入图片描述

三、什么是接口?

接口可以理解为对一组方法声明进行的统一命名,但这些于方法没有提供任何实现。也就是说。,把一组方法声明放在在一个接口中,然后继承该接口的类都需要实现这些方法
通过接口,你可以对方法进行同一管理,继承接口的类只需实现这些方法就可以了。

假如,一个选课系统,可以将对用户的管理的方法声明放到一个接口里;对课程的管理的方法声明放到一个接口里。
只需用类来继承这些接口并实现就可以了。

四、接口的作用

1.可以实现不同类的相同行为,不需要考虑类之间的层次关系;
2.可以指明多个类需要实现的方法;
3.可以使处于不同层次甚至互不相关的类具有相同的行为。

例:
在这里插入图片描述在这里插入图片描述

五、接口

1.有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。
2.接口(interface)是抽象方法和常量值的定义的集合。
3.从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
4.实现接口类:
class SubClass implements InterfaceA{ }
5.一个类可以实现多个接口,接口也可以继承其它接口

接口的特点:
1.用interface来定义。
2.接口中的所有成员变量都默认是由public static final修饰的。
3.接口中的所有方法都默认是由public abstract修饰的。
4.接口没有构造器。
5.接口采用多继承机制。

如何定义接口:
在java中定义类使用关键字class,定义接口使用关键字interface
interface InterfaceA{ }

如何实现接口:
在java中继承类使用关键字extends,实现接口使用关键字implements
class SubClass implements InterfaceA{ }

实现多个接口:
class SubClass extends SuperClass implements InterfaceA, InterfaceB{ }

接口的实例:

interface Runner {public abstract void run();}
interface Swimmer {void swim();}
interface Flier {void fly();}
class Duck implements Runner, Swimmer, Flier {
@Override
public void fly() {System.out.println("丑小鸭也可以变成白天鹅!");}
@Override
public void swim() {System.out.println("红掌拨清波");}
@Override
public void run() {System.out.println("鸭子屁股扭扭的走路");}
}

接口多继承:
接口与接口之间是继成关系,使用extends关键字,而且接口可以多继承
interface InterfaceA extends InterfaceB { }

接口总结:
1.通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
2.通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能。
3.接口主要用来定义规范。解除耦合关系。

抽象类与接口的相同点与不同点:
相同点:
1.接口和抽象类都不能被实例化。只能被其他类实现和继承。
2.接口和抽象类都可以包含抽象方法,实现接口和抽象类的类都必须实现这3.些抽象方法,否则实现的类就是抽象类。
不同点:
1.抽象类与接口定义不同:抽象类abstract class ,接口 interface
2.接口里只能包含抽象方法,不包含已经实现的方法;抽象类则完全可以包含普通的方法。
3.接口里不能定义静态方法;抽象类可以定义静态方法
4.接口里只能定义静态常量属性,不能定义普通属性;抽象类里既可以定义普通属性,也可以定义静态常量
5.接口不包含构造函数;抽象类可以包含构造函数,抽象类里的构造函数并不是用于创建对象,而是让其子类调用这些构造函数来完成属于抽象类的初始化操作。
6.接口不包含初始化块,但抽象类可以包含初始化块
7.一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java的单继承不足

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值