JavaCore复习

来源:互联网 发布:telnet端口不通 编辑:程序博客网 时间:2024/06/05 08:31
/*!
 * 继承
 * Java和C++继承的区别在于
 * 1.Java继承的关键字是extends,C++是:
 * 2.Java继承只能是公有继承,java没有private,protected继承
 * 3.Java继承只能是单继承,多继承采用的方法类似接口实现
 */

import static java.lang.System.*;

/*!
 * 上课
 * interface的所有方法都是abstract public
 * 特别注意::abstract public ,说明实现接口的必须是public,
 * 如果是低于public会报降低了访问权限
 */
interface AttendClass{
  String getClassName() ;
  String getTeacher();
  String getClassRoom();
}

/*!
 * class没有说明访问权限,默认是friendly
 * 只有同一个包内可见,一个java文件中只能拥有一个同名的public类(在顶层)
 * 当然嵌套是可以的
 * A.java
 * public class A{
 *  public class B{
 *  }
 * }
 *
 * public class M{} //错误,A中只能有一个public
 */
class Address{
  private String city;
  private String address;
  private String addressNo;
  private String province;

  public Address(String city, String address, String addressNo, String province){
    this.city = city;
    this.address = address;
    this.addressNo = addressNo;
    this.province = province;
  }

  public String toString(){
    return province +"省"+city +"市 "+address+addressNo;
  }

  public void show(){
    out.println(String.valueOf(this));
  }
}

/*!
 * 参加活动
 */
interface AttendActivities{
  String getActivitesName();
  String getHostName();
  Address getAssemblyPoint();
}

/*!
 * 基类,父类
 */
class Person{
  enum Sex{
    MALE,
    FEMALE
  }

  /*!所有的对象默认值都是null*/
  private String name = "";
  private int age = 18;
  private String id = "";
  private Sex sex;

  public Person(){
  }

  public Person(String name, int age, String id, Sex sex){
    this.name = name;
    this.age = age;
    this.id = id;
    this.sex = sex;
  }

  public String getSex(){
    return (sex == Sex.MALE) ? "Male" : "Female";
  }

  /*!
   * 测试子类对象调用同名的父类对象函数
   * 使用super关键字
   */
  public void showyou(){
    out.println("姓名:"+name +
        " 性别:" + getSex() +
        " 年龄:" + age +
        " 身份证号:" + id);
  }

  public void clone(Person other){
    this.name = other.name;
    this.age = other.age;
    this.id = other.id;
    this.sex = other.sex;
  }
}

/*!
 * 派生类,Java中派生类调用基类和python类似,调用super来实现
 * 在java中super关键子表征父类对象
 * 在java中构造函数互相调用,必须使用this(argument,...)
 * 不能跟C++一样直接使用类名称来进行调用
 */
class Student extends Person implements AttendClass, AttendActivities{
  private String studentNo;

  public Student(String name, int age, String id, Sex sex, String studentNo){
    super(name, age, id, sex);
    this.studentNo = studentNo;
  }

  /*!构造函数互调*/
  public Student(int studentNo){
    this.studentNo = String.valueOf(studentNo);
    super.clone(generateNewPerson());
  }

  private static Person generateNewPerson(){
    return new Person("zhangsan", 29, "FSJ93209", Sex.MALE);
  }

  /*
   * 实现AttendClass和AttendActivities的接口
   * 接口的实现必须是public的,否则会报错,正在分配更低的权限
   */
  public String getClassName() { return "一年级";}
  public String getTeacher() {return "老王";}
  public String getClassRoom() { return "302";}

  /*!
   * 实现AttendActivites的接口
   */
  public String getActivitesName() { return "爬山";}
  public String getHostName() { return "周星驰";}

  /*!Java 中所有的对象都要加上new,否则调用的时候会认为是方法,找不到该方法*/
  public Address getAssemblyPoint() { return new Address("上海", "虹桥大街", "300号", "上海直辖市");}

  /*!
   * 重新实现Student自己的showyou
   */
  public void showyou(){
    super.showyou();
    out.println("我的学生号:" + studentNo);
  }

  public void yourActivities(){
    out.println("你要去:" + String.valueOf(getAssemblyPoint()) +
        " 招待人:" + getHostName() +
        " 活动主题:" + getActivitesName());
  }

  public void yourAttendClass(){
    out.println("你是: " + getClassName() + "学生"+
        " 你要去:" + getClassRoom() + "教室上课" +
        " 老师是:" + getTeacher());
  }
}

public class JavaCore05{
  public static void main(String[] args){
    Student s = new Student(1001);
    //在子类中调用父类的方法
    s.showyou();
    //调用实现的接口
    s.yourActivities();
    s.yourAttendClass();
  }
}