Java--抽象とインタフェース

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_45613931/article/details/101858891


私は、自己評価、自己概要についてブログを書くために、初心者でした。
間違った場合は、大物を指摘してください。
参考資料:ゼロベースの学習のJava


抽象

抽象思考がプログラムを確立する考えです。
オブジェクトが抽出された共通の抽象メソッドとプロパティを持つことです、それは抽出のすべてのオブジェクトに共通する、
抽出、再設計、より汎用性の高い、より人気のクラスの後、抽象クラスと呼ばれます。

抽象キーワード抽象によって表される共通の特性を有するクラスを指します。
これらの抽象クラスでは唯一の共通の特徴のメソッドとプロパティを定義しますが、共通の特性を達成するための具体的な方法はありません。
抽象クラス自体の一つ以上の抽象メソッドを有する抽象クラスとして定義されなければなりません。

抽象メソッドは、キーワード抽象表現と呼ばれています。抽象クラスは唯一の抽象メソッドを持つことができ、また限り、抽象メソッドがあるとして具体的な方法、クラスを持つことができ、その後、このクラスは抽象クラスです。

抽象メソッド抽象クラスのではないすべてのサブクラスは、サブクラスでも抽象クラスである場合は、抽象クラスは、継承することができます。抽象メソッド抽象クラスのすべての場合は、サブクラスが抽象的ではありません。抽象クラスは、メソッドが抽象クラス、抽象クラスである必要がありますが、必ずしもこの方法はすべて固有のものであってもよいし、抽象メソッドが含まれていないが含まれています。

抽象クラスがインスタンス化されていない、すなわち、オブジェクトの新しいインスタンスを生成するために使用できませんが、オブジェクトの抽象クラスの具象サブクラスを指すように変数を宣言することができます。

いくつかは、親クラスのメソッドを実装したくない場合に抽象クラスの利点は、あなたが達成することはできないということ。
抽象クラスの別の用途は以下のとおりです。抽象クラスでは1、我々はプログラム全体の一貫性を確保することができるように、サブクラスが実現することを可能にする汎用的な抽象メソッドを定義します。

例:

public class Abstract {
	public static void main(String args[])//主方法
	{
		student1 s1=new student1();
		student3 s3=new student3();
		s1.setschoolname("理工");
		s1.setclassname("计算机");
		s1.setlocation("长春");
		s1.setstudentname("李");
		s1.setstudentcode("113");
		s1.setstudentsexy("男");
		s1.setstudentbirthday("1998");
		s3.setschoolname("四川大学");
		s3.setclassname("金融");
		s3.setlocation("四川");
		s3.setstudentname("李一");
		s3.setstudentcode("112");
		s3.setstudentsexy("女");
		s3.setstudentbirthday("1999");
		System.out.println(s1.tostring());
		System.out.println(s3.tostring());
	}
}
//创建一个抽象类 
abstract class school2{
	String schoolname;
	String classname;
	String location;
	//通过设置器来设置各个参数
	public void setschoolname(String schoolname) {
		 this.schoolname=schoolname;	
	}
	public void setclassname(String classname) {
		this.classname=classname;	
	}
    //通过访问器来获得对象的参数
	public String getschoolname() {
		return schoolname;
	}	
	public String getclassname() {
		return classname;
	}
	//设计抽象方法
	abstract void setlocation(String location);
	abstract String getlocation();
	//重写tostring()方法
	public String tostring()
	{
		String infor="学校名称:"+schoolname+" 班级名称:"+classname;
		return infor;
	}
}
//创建学生类,继承抽象类school2
class student1 extends school2{
	//创建成员变量
	String studentname;
	String studentcode;
	String studentsexy;
	String studentbirthday;
	void setlocation(String location){
		this.location=location;
	}
	String getlocation(){
		return location;
	}
	void setstudentname(String studentname) {
		this.studentname=studentname;			
	}
	void setstudentcode(String studentcode) {
		this.studentcode=studentcode;	
	}
	void setstudentsexy(String studentsexy) {
		this.studentsexy=studentsexy;
	}
	void setstudentbirthday(String studentbirthday) {
		this.studentbirthday=studentbirthday;
	}
	String getstudentname() {
		return studentname;
	}
	String getstudentcode() {
		return studentcode;
	}
	String getstudentsexy() {
		return studentsexy;
	}
	String getstudentbirthday() {
		return studentbirthday;
	}
	//通过tostring()方法来让对象以字符串的形式输出
	public String tostring(){
		String infor=super.tostring()+" 学校地址:"+location+" 学生姓名:"+
                studentname+" 学号:"+studentcode+" 性别:"+studentsexy+
                " 出生年月:"+studentbirthday;
		return infor;
	}
}
//设计抽象类student2,继承抽象类school2
abstract class student2 extends school2{
	//创建成员变量
	String studentname;
	String studentcode;
	String studentsexy;
	String studentbirthday;
	//设计抽象方法
	abstract void setlocation(String location);
	abstract String getlocation();
	void setstudentname(String studentname) {
		this.studentname=studentname;			
	}
	void setstudentcode(String studentcode) {
		this.studentcode=studentcode;	
	}
	void setstudentsexy(String studentsexy) {
		this.studentsexy=studentsexy;
	}
	void setstudentbirthday(String studentbirthday) {
		this.studentbirthday=studentbirthday;
	}
	String getstudentname() {
		return studentname;
	}
	String getstudentcode() {
		return studentcode;
	}
	String getstudentsexy() {
		return studentsexy;
	}
	String getstudentbirthday() {
		return studentbirthday;
	}
	//通过tostring()方法来让对象以字符串的形式输出
	public String tostring(){
		String infor=super.tostring()+" 学生姓名:"+
                studentname+" 学号:"+studentcode+" 性别:"+studentsexy+
                " 出生年月:"+studentbirthday;
		return infor;
	}
}
//设计了类student3,继承类student2
class student3 extends student2{
	void setlocation(String location){
		this.location=location;
	}
	String getlocation(){
		return location;
	}
	//通过tostring()方法来让对象以字符串的形式输出
	public String tostring(){
		String infor=super.tostring()+" 学校地址:"+location+";";
		return infor;
	}
}

インターフェース

クラスのみが行う必要があります示しているが、何をすべきかを指定しません。つまり、唯一のメソッド名は、何のメソッド本体はありません。

インターフェイスを実装します。両方の方法の名前は、メソッド本体を持ってみましょう。

インターフェイスを使用する:このブロックでは、インターフェースを規範として、あなたは学生のクラスを作成する場合、学生のクラスは学校を実装するために、このインターフェイスを使用します。それは私たちがそのクラスの機能を実現するために知っている、インターフェイスの定義を参照するので、クラスの同じ種類のブロック全体が統一規格を持っているようにすることです。

注意:
1)Statementクラスは、指定されたインターフェイスを実装する必要があります。
2)すべてのメソッドで定義されたインタフェースを提供します。
3)インターフェースはインターフェースであり、クラスは、クラス、インタフェース≠クラスです。
4)継承された欠陥を補完するインタフェース。継承は、単一継承、およびインターフェースでなければならないので、このクラスは、複数のインターフェースを実装することができます。
;)(SC =学校新しい新しい学生:5)インタフェースのインスタンスを生成するには
。インタフェースで6)、およびインスタンスフィールドはstaticとして宣言することはできませんが、定数を宣言することができます。
7)インタフェースも継承することができます。
8)今から、インターフェースは、単に仕様ではないプログラミングのアイデアです。インターフェイスのすべてのメソッドとプロパティ、設計対象のクラスの基本的な考え方を示し、これらの方法では、プログラムの必要性を表しています。

例:

//声明一个学校接口,来告诉程序需要做些什么
	interface school   //接口声明默认为public
	{
		//接口中包括了很多方法,但是都没有实现
		void setschoolname(String schoolname);
		void setclassname(String schoolclassname);
		void setname(String name);
		void setcode(String code);
		void setsexy(String sexy);
		void setbirthday(String birthday);
		String getschoolname();
		String getclassname();
		String getname();
		String getcode();
		String getsexy();
		String getbirthday();
	}
	interface school1 extends school //接口也可以继承
	{
		void setname(String name);
		void setcode(String code);
		void setsexy(String sexy);
		void setbirthday(String birthday);
		String getname();
		String getcode();
		String getsexy();
		String getbirthday();
	}
	//创建一个类,让它实现学校这个接口
	class student implements school1  //关键字implements
	{
		private String schoolname;
		private String classname;
		private String studentname;
		private String studentcode;
		private String studentsexy;
		private String studentbirthday;

//通过设置器来设置各个参数
		
		public void setschoolname(String schoolname) {
			 this.schoolname=schoolname;	
		}

		
		public void setclassname(String classname) {
			this.classname=classname;	
		}

		
		public void setname(String studentname) {
			this.studentname=studentname;			
		}

		
		public void setcode(String studentcode) {
			this.studentcode=studentcode;	
		}

		
		public void setsexy(String studentsexy) {
			this.studentsexy=studentsexy;
		}

		
		public void setbirthday(String studentbirthday) {
			this.studentbirthday=studentbirthday;
		}

	    //通过访问器来获得对象的参数
		public String getschoolname() {
			return schoolname;
		}

		
		public String getclassname() {
			return classname;
		}

		
		public String getname() {
			return studentname;
		}

		
		public String getcode() {
			return studentcode;
		}

		
		public String getsexy() {
			return studentsexy;
		}

		
		public String getbirthday() {
			return studentbirthday;
		}
		//通过tostring方法来让对象以字符串形式输出
		public String tostring()
		{
			String infor="学校名称:"+schoolname+" 班级名称:"+classname+" 学生姓名:"+
		                 studentname+" 学号:"+studentcode+" 性别:"+studentsexy+
		                 " 出生年月:"+studentbirthday;
			return infor;
		}
	}
	//主运行函数
public class Interface {	
	public static void main(String args[])  //主方法
	{
		student st1=new student();
		student st2=new student();
		st1.setschoolname("理工大学");
		st1.setclassname("计算机一班");
		st1.setname("李");
		st1.setcode("11331");
		st1.setsexy("男");
		st1.setbirthday("1998-07-21");
		st2.setschoolname("理工大学");
		st2.setclassname("计算机二班");
		st2.setname("孙");
		st2.setcode("11332");
		st2.setsexy("女");
		st2.setbirthday("1998-10-09");
		System.out.println(st1.tostring());
		System.out.println(st2.tostring());
	 }
}

共通する抽象インタフェース:

彼らは抽象的であるため1)、オブジェクトのインスタンスを作成しない;
2)新しい新しいとオブジェクト・インスタンスを作成し、そのオブジェクトのインスタンスを作成するために、変数、変数指示物体実装クラスまたはサブクラスを宣言することができないが。(オブジェクトの変換)

違い:

1)Javaは多重継承をサポートしていないが、サブクラスは複数のインターフェイスを実装することができます。
2)インスタンスフィールドは、静的変数と、インタフェースを持つことができません。抽象クラスはインスタンスフィールドを持つことができます。
3)自動手動指定子にアクセスしなければならない公共、抽象クラスのメソッド宣言にインターフェースを設定する方法。

(抽象インターフェース、インターフェースのほとんどを有します)

おすすめ

転載: blog.csdn.net/qq_45613931/article/details/101858891