J2SE视频之面向对象

xiaoxiao2021-02-28  6

前言

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

具体内容

构造函数(方法)

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

1、this代表当前对象

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();语句

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

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

格式: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。

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

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

感受

知识是总结出来的,学习是需要一步一个脚印走出来的。

转载请注明原文地址: https://www.6miu.com/read-1400136.html

最新回复(0)