最近感觉好多知识点甚是凌乱 今天就做个小总结 以便自己以后翻阅!
想到哪 就写到哪 吧 有不对的地方还望谅解
1.抽象方法和构造方法的区别:
抽象方法用abstract修饰 并且没有方法体 例如://抽象类 public abstract class A{ public abstract void B() //抽象方法 }
而构造方法没有任何修饰 有方法体 一般创建对象的时候就会自动执行
列如: public class A{ } //类 public A(){}//构造函数 (名称和类名一样) public static void main(String[] args){ A a= new A() //创建子类的对象 、创建子类对象的同时执行了构造函数 }
在说说 java当中的继承 、抽象类和接口吧,发现他和.net(c#)只是大同小异
比如.net 当中的继承用的是 public class 子类:父类{ }而Java当中的继承怎用extends 如:public class 子类 extends 父类{ }
Java当中的抽象类
之前在学.net的时候一直没明白到底什么是抽象类 纠结了好长时间 昨天突然明白了:所谓抽象类 就是一种总体的概括的说法 比如:吃()这个方法 虽然是动物都会吃 但 具体的吃法以及吃什么
怎么吃 却都不一样 所以用抽象类 即这种总的抽象方法去描述它
写个简单的demo 了解一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public abstract class A//抽象类 父类 { public abstract void Study()抽象方法 } public class xuexi extends A//抽象类 { public void Study(){}//重写子类的方法 //并且只能重写子类对象 父类的对象不能被实例化 } public final class TexT { public static void main(String[] args) { xuexi a=new xuexi();//创建子类的对象 a.Study()//通过子类对象调用方法 } } |
在谈谈接口吧: 我的理解就一种特殊的抽象类 ;他是一个抽象法的具体实现 它可以多实现 而抽象类不可以多实现
定义格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
使用interface代替了原来的class,其他步骤与定义类相同:
接口中的方法均为公共访问的抽象方法
接口中无法定义普通的成员变量
在看一个很经典的小demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
interface 缉毒{ public abstract void 缉毒(); } //定义犬科的这个提醒的共性功能 abstract class 犬科{ public abstract void 吃饭(); public abstract void 吼叫(); } // 缉毒犬属于犬科一种,让其继承犬科,获取的犬科的特性, //由于缉毒犬具有缉毒功能,那么它只要实现缉毒接口即可,这样即保证缉毒犬具备犬科的特性,也拥有了缉毒的功能 class 缉毒犬 extends 犬科 implements 缉毒{ public void 缉毒() { } void 吃饭() { } void 吼叫() { } } } |
总结总结接口和抽象类的区别:
相同点:
都位于继承的顶端,用于被其他类实现或继承;
都不能直接实例化对象;
都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系
接口是这个事物中的额外内容,继承体系是一种 like..a关系
二者的选用:
优先选用接口,尽量少用抽象类;
需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;