J2SE视频之面向对象

来源:互联网 发布:best video 软件 编辑:程序博客网 时间:2024/05/22 09:03

前言

面向对象是我们编程的基础,也是我们要追求的目标。面向对象,首先就是将对象抽象出来,对象通过属性和方法来分别对应事物所具有的静态属性(成员变量)和动态属性(方法)。


具体内容

构造函数(方法)

constructor

构造函数,和类同名,没有返回值。初始化成员变量,不加void,如果有父函数,先调用父函数构造函数,再调用子函数的构造函数。父类中须有无参构造函数。

class Worker {private String name;Worker(String name) {this.name = name;}public String getName(){return name;} }public class TakeCarePet {public static void main(String[] args) {Worker w1 = new Worker("David");System.out.println(w1.getName());}}

输出结果:David

重写/重载

overload

重载,放在一个类中。

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float),但是不能为fun(int, int));

2、不能重载只有返回值不同的方法名。因为返回值区分不出来。

3、存在于父类和子类、同类中。

4、不能通过访问权限、返回类型、抛出的异常进行重载;

overwrite(override)

重写。如果子类对继承父类的方法不满意,可以重写,当调用方法时会优先调用子类的方法。 

 特点:

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

5、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

关键字

this

1this代表当前对象

this.属性:操作当前对象的属性

this.方法:调用当前对象的方法

2、封装对象的属性的时候,经常会使用this关键字。

实例程序:class Animal {public String name;Animal(String name) {this.name = name;}}

static

在一段程序中,适当加入一个Static的值,使其运算后自加一,可以当作计数器。

属于所有类;第一次使用时被初始化。

成员变量分布在datasegment中;

不需要new一个对象就可以访问。类名.成员变量就可以访问。

static声明的方法为静态方法,在调用时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。

静态方法不再是针对某个对象的调用,所以不能访问非静态成员。

静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。


实例程序:public class Cat {    private static int sid = 0;    private String name;     int id;    Cat(String name) {        this.name = name;          id = sid++;    }    public void info(){        System.out.println               ("My name is "+name+" No."+id);    }    public static void main(String arg[]){//赋值方式        Cat.sid = 100;        Cat mimi = new Cat("mimi");        mimi.sid = 2000;        Cat pipi = new Cat("pipi");        mimi.info();         pipi.info();    }}

Super 当前对象的父对象

super

在子类中使用。

子类的构造方法都会首先去执行父类的构造方法,默认访问无参构造方法

 因为:每一个构造方法的第一行都有一条默认的super();语句

 作用:用于子类访问父类数据的初始化,只有执行了父类的无参构造方法,才能访问父类的数据

注意:当父类没有无参构造方法时,子类的构造函数必须通过thissuper关键字指定要访问的带参构造方法

格式:super(...)括号中的内容由带参构造方法的参数类型决定

            this()——前提是:必须已经有一个子类用super访问了父类构造方法

实例程序:class Animal {public String name;Animal(String name) {this.name = name;}}class Cat extends Animal {public String eyesColor;Cat(String name,String eyesColor) {super(name);this.eyesColor = eyesColor;}}

final

final修饰类,该类不可以被继承

final修饰方法,该方法不能被重写。

final修饰属性,该类的初始化属性必须有值或在构造方法中赋值(只能选其一)

final修饰变量,该变量的值只能赋一次值,即变为常量。


实例程序:public class TestFinal {public static void main(String[] args) {T t = new T();}}final class T {final int i = 8;public final void m() {}}class TT extends T {}

内存分配

内存中分四块:

堆:对象生成时(属性)。

栈:局部变量

Code segment:方法。

Data segment:静态常量

访问控制


抽象类

abstract

含有抽象方法的类是抽象类。抽象方法只需声明,不需实现。

抽象类必须被继承。

抽象方法必须被重写。

抽象类不能被实例化。

interface

  implements

特殊的抽象类,

所有的成员变量都是public static final

所有的方法都是抽象的public的。

子接口可以extens父接口,而不去实现父接口中的方法。

子类implements接口后,必须实现接口中的方法。

子类可以即extends父类,同时implements接口1,接口2

接口和接口之间可以相互继承,

类和接口之间只能implements

一个类可以实现多个接口。

接口的本质:内存中,可以看见其对象的一部分方法。

感受

知识是总结出来的,学习是需要一步一个脚印走出来的。
原创粉丝点击