自从上次上完课后,就一直复习,今天考完一科之后,有时间写一下博客了。
一、上次课主要讲了java面向对象的三大特性:封装、继承和多态。
1、封装:在关于封装的控制符里,访问等级由小到大分别是private、default、protect和public,其中,默认的访问等级是default。但是我在运行时想用default来修饰类的成员变量和函数,却报错,需要我删除default这个修饰符。
2、继承:java里面只有单继承,无多继承,多继承的功能可以用接口来使用。子类继承父类,需要使用extends修饰符,子类访问父类的内容,则使用super,子类访问自己的变量或函数,可以使用this。
3、多态:即一种定义多种实现,其中,我们接触到了一个例子:
public class Class {
<span style="white-space:pre"> </span>public static void main(String[] args){
<span style="white-space:pre"> </span>BaseClass baseclass=new BaseClass();
<span style="white-space:pre"> </span>SubClass subclass=new SubClass();
<span style="white-space:pre"> </span>BaseClass bs=new SubClass();
<span style="white-space:pre"> </span>if(bs instanceof BaseClass){
<span style="white-space:pre"> </span>System.out.println("baseclass");
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else if(bs instanceof SubClass){
<span style="white-space:pre"> </span>System.out.println("subclass");
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>bs.base();
<span style="white-space:pre"> </span>bs.test();
<span style="white-space:pre"> </span>}
}
class BaseClass{
<span style="white-space:pre"> </span>public void base(){
<span style="white-space:pre"> </span>System.out.println("1");
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public void test(){
<span style="white-space:pre"> </span>System.out.println("2");
<span style="white-space:pre"> </span>}
}
class SubClass extends BaseClass{
<span style="white-space:pre"> </span>public void base(){
<span style="white-space:pre"> </span>System.out.println("3");
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public void test(){
<span style="white-space:pre"> </span>System.out.println("4");
<span style="white-space:pre"> </span>}
}
这里,BaseClass是父类,SubClass是子类,在编译过程中,bs是BaseClass类,在执行过程中则是SubClass类。
4、初始化块:初始化块只能由static修饰,而且最先执行,用于在创建对象的时候进行某些赋值操作。
二、值得注意的地方
1、eclipse中可以快速生成get、set方法,在成员变量中右击source中。
2、再重写方法时,最好使用@Override,可以增强代码的可读性。
3、使用instanceof方法,可以判断变量的类型,方便后面的操作。
4、不能在父类中调用即将被子类重写的代码。
5、重写带参数的构造器而不重写默认构造器,则默认构造器不可使用。
三、作业
public class PersonInSchool {
public static void main(String[] args){
Teacher teacher=new Teacher();
Student student=new Student();
ClassTeacher classteacher=new ClassTeacher();
School school=new School();
System.out.println(student.getName()+"在"+school.getPlace()+student.getAction());
System.out.println(teacher.getName()+"给"+student.getName()+teacher.getAction());
System.out.println(classteacher.getName()+"要求"+student.getName()+"参加"+school.getPlace()+"的"+school.getActivity());
}
}
class Person{
private String name=null;
private String action=null;
}
class Teacher extends Person{
private String name="老师";
public String getName() {
return name;
}
private String action="布置作业";
public String getAction() {
return action;
}
}
class Student extends Person{
private String name="学生";
public String getName() {
return name;
}
private String action="上课";
public String getAction() {
return action;
}
}
class ClassTeacher extends Teacher{
private String name="班主任";
public String getName() {
return name;
}
}
class School{
private String place="学校";
public String getPlace() {
return place;
}
public String activity="文体活动";
public String getActivity() {
return activity;
}
}
在这里,我首先创建了Person类和School类,教师类和学生类继承Person类,班主任类继承教师类,在各个子类中都重写Person类的成员变量,再在主类中调用各个方法,达到输出目的。