⚔疯狂输出⚔ 抽象类 与 接口 快速理解二者的特点和两者的区别

来源:互联网 发布:淘宝网大毛衣外套 编辑:程序博客网 时间:2024/05/17 05:01

抽象类
什么是抽象 抽象就是 表达一种事物但是这种事物不能非常直接的描述出来
抽象类就是说 这个类很抽象不能直接描述出来他具体可以实现的功能。
要用使用抽象类 必须要用关键词 abstract
当 abstract 修饰类的时候 这个类就叫做抽象类
抽象类

`abstract  class  name {}` 

当 abstract 修饰方法的时候这个方法就叫做抽象方法
抽象方法

public abstract  void  eat(); 

抽象方法中没有实现的部分所以没有这一对{ }
我们写一个普通的成员方法

public static  vooid eat(){system.out.println();}

我们在学多态的时候我们都是用子类的一个方法去重写一个父类的方法
然后输出一个值。
注意:抽象类中 的抽象方法会强制子类去重写抽象方法
注意:抽象类不能实例化对象 也就是说抽象类中不可以创建对象。
我们下面来一起写一个例子
题目 动物类 吃 猫吃 鱼

public class Demo01{public static void main(String[]agrs){}}abstract class Animas{   //写一个抽象类//写一个抽象方法   public  abstract void eat();  //空的抽象方法 为什么是空 是因为抽象方法没有方法体。因为他是抽象的不可以解决具体的事情}//写一个子类class Cat extends Animas{public void  eat(){  //抽象方法的重写System.out.println("猫吃鱼")}}

抽象类中的成员变量
抽象类中成员变量:可以有变量 也可以有常量
抽象类中成员方法 : 有成员方法 也有抽象方法
抽象类中构造方法: 有有参的构造方法 也有无参的构造方法
接下来我们写一个抽象类 看看上面的是否成立
还是以动物 名字 吃
猫吃鱼为例子

public class Demo02{public static void  main(String[]agrs){ Animas  animas =  new Cat();  animas.eat();}}abstract class Animas { //写一个抽象类  String name;//写一个抽象方法public abstract void eat();public Animas(){ //无参构造方法}public Animas(string name){  //有参构造方法this.name = name;}}class Cat extends Animas{   // 猫继承动物的基础属性public  Cat(){     //无参构造方法}public  Cat(String name){//有参的构造方法  super.name= name;}public void eat(){   //抽象类强制会强制子类重写抽象类的抽象方法System.out.println(“猫吃鱼”);}}//注意 抽象类的子类 必须重写 所有抽象类中抽象方法

根据上面的代码还有文字其实我们可以总结出一句话。
抽象类中不一定有抽象方法,但是抽象方法一定在抽象类中!!!
上面我们说了 abstracr作用他的具体作用到底是什么 ?
禁止创建抽象类的对象出来,必须使用用子类。
那么一个类中没有抽象方法,他可以不可以定义为抽象类?如果可以他的作用是什么?
可以 上面的话说了抽象类中不一定有抽象方法 但是抽象方法一定在类中。抽象方法是禁止抽象类创造抽象对象出来。

那么 abstract 不能和哪些关键字并存呢?
1.static和abstracr 为什么不能并存?
原因:static 随着类的加载类加载 所以调用方法要是使用类名 abtract 修饰的抽象类 禁止生成对象 也没有抽象方法的方法体没办法调用。 没有实现的部分 只有声明的部分 调用不到 没有任何关系 所以不能并存
2.final和abstract为什么不能并存?
因为 final 自身的属性 修饰类的时候 不能被继承 修饰变量的时候不能被修改 修饰方法的时候不能被重写 而abstract 要强制 子类去重写抽象方法 所以这很冲突 他们两个所以不能并存
3.private和 abstrtic为什么不能并存?
因为被private修饰的只能本类的对象访问 子类是访问不到的 所以子类无法重写被private隐藏的父类方法,所以他们两个也不能并存。

接下来我们讲接口
接口我们生活中的接口是什么 ?
我的 理解我们生活的接口 想要使用 他必须是同属性的接口 并且 接口可以让属性本身的能力更强壮 但是你想在接口上添加东西要符合他的规则 所以说接口不同规则组成的一个大规则。他还是一个规则!
接口主要能干什么?
利用规则去接通某些功能在接通后要有数据的交换才能实现功能的顺利使用呢
那广义的说 接口就是规则
狭义的说 接口就是交换数据的一道门他需要一把同型号的钥匙打开这个规则就是钥匙。

接下里我们看看如何定义一个接口
关键字 interface 接口名 {} 是不是和类从命名方式相同但是请大家记住 接口不是一个类

接口有什么特点呢?
1.在接口中只能声明一个 抽象类

2.接口中只有常量没有变量 当你在声明一个变量时系统会在变量前面默认添加 public static final 这两个关键字来修饰这个变量 让他成为常量
所以说当我们刚学不就的人最好是把 默认的这个三个public static final 自己写上 这样不容易混淆 他是一个常量而不是一个变量

3.接口不能实例化对象 也就是刚刚说的禁止创建一个对象 。那接口怎么使用呢?
是谁使用接口 谁就去实现接口中的方法

4.接口的使用 想使用一个接口必须要使用关键字 implement 关键字

5.在接口的抽象方法 如果你不写 public abstract 系统前面会默认给你添加 所以和上面一样 新手最好把这个 public abtract 自己写上 加深记忆 也不会混淆 知识点。

接口中的成员变量 成员方法 构造方法

1.成员变量
我们上面说过了 public static final 这个三个关键字是系统默认的刚学的人一定要自己写上

2.抽象方法
我们上面也说了 public abstract 这个两个关键字也是系统默认的刚学的人一定要自己写上
并且 接口中没有成员方法 只有抽象方法

3.构造方法
还记得我们上面说的嘛?抽象类没有构造方法 这里只能用抽象类声明 所以也没有构造方法!

类和类是什么关系?
类是不是只能 单继承 和多层继承 没有多继承?
所以说类和类之间的关系就是 只能单继承 和多层继承 不能多继承

类和接口的关系
类和接口的关系是 实现关系 类实现接口。 可以但实现 也可以多实现。

接口和接口的关系
接口和接口之间的关系 就是单继承 也可以多继承 注意 :千万不要和类和类之间的关系记混了!!!
下面我们来写一个接口

public class Demo01{public static void main (string[]agrs){    IndexA index = new person ();  //父类的引用指向子类的对象    index.print();   //调用子类对象的方法    System.out.println("Index.num");  //接口的常量}}interface IndexA{  //创建一个接口public static fainl int  num= 0//给接口常量赋值public abstract void print(); //抽象方法}class Person interface IndexA{  //继承public void  print(){   //强制子类去重写抽象方法System.out.println("");  //打印}}

接口 和抽象类的区别

接口
成员变量
只有常量 用 public static final 修饰
成员方法
有 static 修饰的静态成员方法 有默认的成员方法 有抽象方法
构造方法
接口中没有构造方法

接口不是一个类

抽象类
成员变量
有成员变量 有常量
成员方法
有成员方法 有抽象方法
构造方法
抽象类中有构造方法

抽象类只是类中的一种特殊形式 所以他还是一个类

阅读全文
0 0