学习打卡2

今天学习了抽象,接口以及封装
以下是看完博文后学习提取到的知识点以及代码
抽象方法:只有声明,没有具体的实现。抽象方法必须用abstract关键字进行修饰。
抽象类:用abstract关键字修饰的类是抽象类。
注意:因为抽象类中没有具体的实现方法,所以抽象类不能创建对象。抽象类不一定含有抽象方法,但如果一个类中含有抽象方法,那么这个类一定是抽象类。抽象类除了被继承外,没有任何意义。抽象类中也可以有成员变量和成员方法。

抽象类和普通类的主要有三点区别:
  1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
  2)抽象类不能用来创建对象;
  3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

接口:用关键字interface来声明,它是对行为的抽象。
接口中同样也可以含有变量和方法。注意:接口中的变量全部为public static final,方法全部为public abstract。接口中的方法必须都是抽象方法(一般情况下,不在接口中定义变量)
用implements关键字来实现接口:

class iclass implements Interface1,Interface2{
}

一个类可以同时实现多个接口,如果一个类实现了某个接口,就必须实现改接口中的全部方法。

引用原博文中的一个例子:飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

以下是今天学习后的代码:

import java.util.Scanner;
public class AlarmDoor extends Door implements Alarm{
	public void Open() {
		  System.out.println("开门");
	  }
      
	 public void Close() {
		 System.out.println("关门");
	 }
//实现接口中的方法
	 public void alarm() {
		 System.out.println("报警");
	 }
      public static void main(String[] args){
       Scanner s = new Scanner(System.in);
       int i = s.nextInt();
       AlarmDoor d = new AlarmDoor();
       if(i==1)
       d.Open();
       else {
       if(i==0)
       d.Close();
       else 
    	   d.alarm();
      }
      }
}

public interface Alarm {
       public abstract void alarm();
}

public abstract class Door {
       abstract public void Open();
       abstract public void Close();
}

封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法类实现对隐藏信息的操作和访问。

package encapsulation;

public class Student {
       private String name;   
       private int age;

public void setname (String name) {
	this.name = name;
  }
public String getname() {//外部只能通过该函数对类成员变量进行访问
	return name;
}
public void setage(int age) {   //外部只能通过该函数对成员变量进行修改
	this.age = age;
}
public int getage() {
	return age;
}

以下是原文链接
http://www.cnblogs.com/dolphin0520/p/3811437.html

原文地址:https://www.cnblogs.com/susususu/p/10719232.html