手记
下载APP

java 面向对象

Java 面向对象

什么是重复造轮子?
利用已有资源,实现自己目的。而自己不必去实现每一个细节。前提是,得会用已有资源。

package com.curtis;
public class TestClass {
    public static void main(String[] args) {
        Student st1 = new Student();
        st1.setName("Curtis");
        st1.getInfo();
    }
}


class Person {
    private String id;
    private String name;
    private String sex;
    private Integer age;

    public Person() {

    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

class Student extends Person {
    private String school;

    public Student() {
    }

    public void getInfo() {
        System.out.println(getName());
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

}

观察上面代码:
Student 类的实例可以使用Person 类中的方法 setName(String name)

数据库:存储数据的仓库

1、二维表结构
2、表中的一行数据

简单java 类
略,上面Person 示例就是。

为什么会用到简单java类?
1、表中的一行记录可以用一个实例对象表示。实例对象是类通过实例化来的。所以类的定义得参考表中的字段。

package com.curtis;
public class TestClass {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setId("10000");
        p1.setName("Curtis");
        p1.setAge(25);
        p1.setSex("男");
        System.out.println(p1.getInfo());
    }
}

class Person {
    private String id;
    private String name;
    private String sex;
    private Integer age;

    public Person() {

    }

    public String getInfo() {
        return "编号:" + this.getId() + "、姓名:" + this.getName() + "、年龄:" + this.getAge() + "、性别:" + this.getSex();
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

简单java 类
1、包
2、定义类
2.1、访问修饰符
2.2、关键字 class
2.3、类名称
3、类中的属性
3.1、访问修饰符
3.2、强类型的编程语言都需要给变量声明数据类型;
4、对象通过方法的调用给属性赋值,对象通过方法的调用从对象中取出值
4.1、方法的定义
4.1、访问修饰符public private protected
4.2、方法执行完是否会有内容返回(决定是否有return)
4.3、方法的名称
4.4、方法的参数列表,是一个还是多个
4.5、static 方法
4.6、方法的重载(方法名称相同,参数列表不同[参数数据类型,参数个数])
4.7、方法的覆写(有一个前提,继承关系)
4.8、普通方法、static 方法调用方式
4.2、方法的调用
5、构造方法
5.1、为对象进行初始化

普通方法跟static方法
1、普通方法是类的对象进行调用。在类内部可以相互调用。
2、static方法属于类,不是某个类的实例的。
注意点:普通方法中能够调用static 方法么?答案是:可以。那static 方法能够直接调用普通方法么?答案是:不可以。
普通方法要通过类的实例进行调用,static 方法调用方式:类名.static方法名。如果在static 方法中对普通方法进行调用,类的实例不存在该如何处理。

类跟对象
以汽车为例
1、汽车的设计图纸
2、汽车零件
3、汽车

类是,类对象的类型
Person 自定义类
Person p1=new Person();
String 编程语言定义的类
String name=“Curtis”;name 的类型是字符串。p1 的类型是Person类

构造方法
类文件–>内存 实例化,通过构造方法。

什么叫做实例化?
程序员编写的是.java 文件,要想用这个.java 文件,必须要到内存中去,从.java 到内存中的过程可以想象成是在实例化(说法并不标准,但是可以这样理解);

static方法调用的方式:
1、在同一个类中,直接调用
2、在一个类中想调用其它类中的static方法:类名称.static方法名称

为什么要有static 呢?
以数据库的打开,关闭为例;
如果将数据库的打开关闭操作都定义成普通方法,那么在调用打开,关闭方法时,都需要通过类创造一个对象实例出来。

什么是类对象?static 内容就是属于类的。
什么是实例对象?属性,普通方法是类的实例进行调用的,属于实例对象。

package com.curtis;
public class TestClass {
    public static void main(String[] args) {
        say();
    }

    public static void say(){
        System.out.println("hello world");
    }
}

继承(对类功能的扩充),关键字extends。

是不是父类中的所有内容子类都能够使用?不是,private 修饰的内容子类是无法使用的;

方法的重载与方法的重写
1、同一个类中方法名称相同,方法的参数列表不同,这样现象称之为方法大的重载
2、方法的重写,前提:必须要有继承关系
重写:继承类在使用被继承类中的方法时,发现被继承类中的方法无法满足要求。

多态
Person p2=new Student();
父类引用指向子类实例化对象;

this关键字
指代本类

package com.curtis.bean;
public class Person {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

name 是Person的一个属性
方法内的this.name 表示的是当前这个类里面的东西,而右边的name是方法的参数传进来的;

super关键字
有个前提:存在继承关系
继承类使用被继承类中的方法。为了说明是被继承类中的方法,还能用在构造方法上面;

继承关系里面实例化继承类时跟被继承类是否有关联?

在实例化集成类过程中,会先调用被继承类中无参数的构造方法;

Person p3=new Person();
p3.setName("Curtis");

System.out.println(p3.getName());

上述代码:
实例对象调用方法,传了个参数。是往实例对象中设置值,实例对象不被垃圾回收机制回收,就是有效的。实例对象通过方法调用,取值出来。

无参数的构造方法
1、按照编程语言语法声明一个类,如果不显示定义构造方法,那么语法会自动隐含声明一个无参数的构造方法
2、如果显示的定义了一个有参数的构造方法,那么语法不会声明一个无参数的构造方法了
3、构造方法的作用是给类中的属性进行赋初值
4、构造方法是一中特殊的方法,方法名称与类名称相同
5、构造方法也能重载
6、如果在类的声明中,自己已经定义了一个有参数的构造方法,那就务必显示声明一个无参数的构造方法,跟反射有关系的

package com.curtis.bean;
public class Person {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // 无参数的构造方法
    public Person(){}

    // 有参数的构造方法
    public Peron(String name){
        this.name=name;
    }
}

抽象类
1、抽象类用到了关键字abstract
2、抽象类跟普通的类区别
2.1、抽象类比普通类多了个抽象方法(抽象方法是没有方法体的,也就是没有{})
2.2、抽象类不能被实例化
2.3、抽象类是给普通类去继承的
2.4、普通类继承了抽象类,必须覆写(重写)抽象类中的抽象方法
2.5、抽象类中的抽象方法就是给出方法的标准
2.6、类的继承用extends关键字
2.7、一般不建议继承一个已经实现好的类,当然语法上面是没有错误的
2.8、既然抽象类是给普通类定义标准,那么抽象类中抽象方法绝对不能使用private关键字修饰
2.9、如果类中有些方法不希望子类进行覆写,那么可以使用final 关键字修饰

接口
implement
面向接口编程是java 里面一个比较有意思的
1、抽象类能够实现接口,接口中定义的方法,抽象类中并不一定要提供提具体实现(抽象类中能定义抽象方法嘛)
2、普通类既继承了抽象类,又实现了某个接口,先继承,后实现接口,也就是写法上是:类 extends 抽象类 implement 接口
案例:public class MemberDAOImpl extends AbstractDAO implements IMemberDAO{}
3、接口里面只有常量、抽象方法
4、普通类实现接口必须实现接口中定义的抽象方法
5、接口也是一种特殊的类,所以接口对象,能够指向普通类的实例

打开App,阅读手记
5人推荐
随时随地看视频慕课网APP