1.封装
封装是为了保护内部数据不被修改,不过可以调用set和get来方便外界调用,这点和c#很像,下面来看代码
public class Time { private int hour; private int minute; public int getHour() { return hour; } public void setHour(int hour) { if (hour > 24 || hour < 0) { System.out.println("输入有误"); } else { this.hour = hour; } } public int getMinute() { return minute; } public void setMinute(int minute) { if (minute > 60 || minute < 0) { System.out.println("输入有误"); } else { this.minute = minute; } } }
值得一提的是,set方法如果有误可以直接输出结果,并不需要syso,例如
t.setHour(25);------------>console输出文字"输出有误"
t.setMinute(61);------------>console输出文字"输出有误"
2.继成
父类也可以成为超类和基类,子类也可以称为派生类
子类可以继承父类的方法,也可以对其进行改写关键字为extends
public class ClassName extends FClassName(){};
super()
在调用子类构造器的时候,如果没有显示的写出super,那么编译器会默认加上super()无参构造器
如果想调用父类的有参的构造器,那么就必须显示的调用,编译器不会默认加上的
创建子类对象的过程就是从底层的基类开始往上,一层层地调用构造方法
注意:super()必须放在语句的第一句
代码如下(先大概了解一下,后期实践逐渐加深理解)
public class A { A() { System.out.println("调用A的无参构造方法"); } A(int i) { System.out.println("调用A的有参构造方法"); } } class B extends A { B() { System.out.println("调用B的无参构造方法"); } B(int i) { super(i); System.out.println("调用B的有参构造方法"); } } class C extends B { C() { System.out.println("调用C的无参构造函数"); } C(int i) { super(i); System.out.println("调用C的有参构造函数"); } }
3.多态
多态目前还不是很清楚其作用和意义,简单的说一下,就好比老虎可以当作动物也可以当作老虎,感觉挺怪.....,还是上代码吧
public class Test { public static void main(String[] args) { Animal t = new Tiger(); Animal d = new Dog(); Animal c = new Animal(); // ShowMe里面的内容可以进行变换 ShowMe(t); } public static void ShowMe(Animal a) { a.showme(); } }
*eclispe快捷键小技巧:
如果有很多属性需要设置get和set则在source->generate getters and setters中勾选生成
如果涉及的属性较少或者只需要get或者set其中一个方法时,则输入get/set----->alt+/---->选择对应的属性名即可
另外选择需要生成set/get的属性,ctrl+1,选择create setters and getters for "xxx",即可快速生成对应的set/get方法
再者还可以使用alt+shift+s可以调出set/get选项,然后操作同第一种一样,确定即可