学习数据结构之前的java基础

讲的主要是实战,怎么用代码把数据结构实现一遍。总的来说,先实战,后理论!

面向对象要点

>对象将数据和操作打包在一起,类描述了这一切


>用构造器创建(实例化)对象
>类和类之间的关系
  -关联(组合、聚合)

聚合:Teacher ◇ -->  Student (弱关联)

组合:Student ◆ --> Name (强关联,拆开对外界没有意义)

  -泛化

 动物(一般)

  ▲

   |  (泛化:更一般,更普通)

  人(特殊)

 

关于继承

- (一般) - 水果

- (特殊) - 苹果、香蕉

is - a :是一个就用继承

has - a :就用组合

  • 祖先类Object:内置顶级类
  • 方法重写
  • toString方法
  • equals方法

关于接口

接口概述

  • Comparable接口:如果你想1个类的对象支持比较(排序), 就必须实现Comparable接口
  • Comparator接口:该接口代表一个比较器,java数组工具类和集合工具类中提供对sort方法排序就是使用Comparator接口来处理排序的
  • Cloneable接口:我们要使用一个对象的clone方法,必须Cloneable接口,否则会抛出CloneNotSupportException
  • Serializable接口:是启用其序列化功能的接口,没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化

 

java中的构造器

构造器是什么

1.构造器,也称构造方法、构造函数。作用是构造出来一个类的实例,确保对象得到初始化

2.构造器的格式: 权限修饰符 类名(无参/有参){  }

3.根据有无参数,可分为无参构造 和有参构造

构造器的特性

1.与一般方法名不同的是,构造方法名必须和类名保持一致,并且没有返回值。

2.Java编译器会自动创建无参构造函数,因此在类中,无参构造即使没有,我们也可省略不写。实例化对象时无需赋值。

3.倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错。

4.当类实例化一个对象时会自动调用构造方法。

 

Student类

 1 package cn.itcast.Linear_01;
 2 
 3 public class Student {
 4     //定义成protected,就可以在子类中访问
 5     protected String name;
 6     protected int age;
 7     protected int ability;
 8 
 9     //想知道老师是谁,就持有一个teacher
10     //聚集(聚合)
11     private Teacher teacher;
12 
13     //重写equals方法,自带的
14     @Override
15     public boolean equals(Object o) {
16         if (this == o) return true;
17         if (o == null || getClass() != o.getClass()) return false;
18 
19         Student student = (Student) o;
20 
21         return name != null ? name.equals(student.name) : student.name == null;
22     }
23 
24     @Override
25     public int hashCode() {
26         return name != null ? name.hashCode() : 0;
27     }
28 
29     //构造器,idea可生成
30     public Student(String name, int age) {
31         this.name = name;
32         this.age = age;
33     }
34 
35     //方法
36     public void study() {
37         ability++;
38     }
39 
40     /**
41      * 重写toString方法
42      * @return
43      */
44     @Override
45     public String toString() {
46         return "Student{" +
47                 "name='" + name + '\'' +
48                 ", age=" + age +
49                 ", ability=" + ability +
50                 '}';
51     }
52 
53     public static void main(String[] args) {
54         Student stu1 = new Student("唐僧", 200);
55         Student stu2 = new Student("悟空", 500);
56         stu1.study();
57         stu1.study();
58         stu2.study();
59 
60         System.out.println(stu1.ability);// 2
61         System.out.println(stu2.ability);// 1
62 
63         //打印的是地址
64         System.out.println(stu1);
65         System.out.println(stu2);
66 
67         //打印的也是地址,toString方法来自Object父类,都默认继承这个方法
68         //如果toString方法不是自己想要的,可以重写toString方法
69         System.out.println(stu1.toString());
70         System.out.println(stu2.toString());
71         
72         //重写完toString方法后,输出为:  Student{name='唐僧', age=200, ability=2}
73 
74 
75         //比对的是地址,equals也是来自Object父类
76         System.out.println(stu1.equals(stu2));// false
77     }
78 }

Teacher类

1 package cn.itcast.Linear_01;
2 
3 public class Teacher {
4     private String name;
5     private int ability;
6 }

CleverStudent类

package cn.itcast.Linear_01;

public class CleverStudent extends Student{

    public CleverStudent(String name, int age) {
        super(name, age);
    }

    //重写
    @Override
    public void study(){
        //super.study();
        //super.study();
        ability++;
    }

    //不是重写,因为没有Override,算是新技能
    public void study(int s){
        ability+=s;
    }

}
posted @ 2020-01-05 19:02  小中配奇  阅读(340)  评论(0编辑  收藏  举报