Java基础-面向对象之封装和继承

来源:互联网 发布:sketch up pro mac 编辑:程序博客网 时间:2024/06/05 16:20
#### 构造代码块
直接定义在类中的大括号对{ }叫做构造代码块,构造代码块创建对象时被调用,每次创建对象都会被调用一次,构造代码块比构造方法先执行


public class CodeBlock {

{
System.out.println("构造代码块");
//其他代码
}
...
public CodeBlock(){
System.out.println("构造方法");
}




#### static修饰符
static表示“全局”或者“静态”,可以用来修饰成员变量和方法,被static修饰的成员变量和方法不属于任何对象,独立于任何对象之外。


对于static如果是非private,可以直接用类名.static属性或者类名.static方法的方式来引用


public class StaticClass {
public static int a = 100;

public int b = 100;

public StaticClass(){
a = 160;
b = 200;
}

public void showInfo(){
test();
}
public static void test(){
a = 200;
}


}
访问a以及test方法
StaticClass.a
StaticClass.test();
static修饰会比普通修饰在内存分配上会靠前,因此不允许在static方法中调用非static变量或者非static方法


#### static代码块
static修饰的代码块叫静态代码块,独立于类之外,被该类的所有对象共享,一个类中可以有多个static代码块,执行顺序由代码前后位置决定,static代码块永远只会执行一次(不管创建多少个对象)

private static int a = 100;


static {
a++;
System.out.println("static代码块,a:"+a);

}


#### null关键字
所有的引用类型默认值都是null,(表示未分配地址,无指向)


#### 自定义类型和基本数据类型的内存分配
堆(heap):数据区,主要存对象实例(实际上是对象的属性,因为方法属于指令)


栈(stack):指令区,基本数据类型、指令代码、常量、对象的引用地址


#### 内部类
在一个类的内部定义的类,叫内部类,包含内部类的类叫外部类


1、内部类可以声明为public、private、protected、默认


2、内部类可以申明为static


内部类可以直接调用外部类的所有方法以及属性(不管是不是private),外部类也可以直接调用内部类的属性和方法


如:InnerClass是定义在OutterClass内部的类
public class OutterClass {
private int t = 100;

private InnerClass inner;


private void test() {
System.out.println(t);
inner = new InnerClass();
//调用内部类的属性和方法
inner.name = "Hello";
inner.testIn();
}


/**
* 定义在其他类内部的类,就叫内部类

* @author Administrator
*
*/
private class InnerClass {
private String name;
private int t = 10;


private void abc() {
System.out.println("inner class"+OutterClass.this.t);
}


private void testIn(){
//调用外部类的方法
test();
}
}
注意:如果内部类中存在属性和外部类属性一样的情况,内部类需要调用外部类的属性需要在属性前加上 外部类.this


OutterClass.this.t


#### 继承
表示方式


修饰符 class 子类名 extends 父类名{

}

public class JiZhuangBox extends Box{
...
}

#### protected修饰符
protected主要用在继承关系中父类的属性或者方法可以给子类直接继承的修饰,该修饰在继承关系之外的类中无法访问(血脉相传,保护血统)


#### 继承关系下的一些规律
子类创建对象时必须调用父类构造,默认情况下调用的是父类的无参构造


子类中可以使用super(...)来调用父类构造(显式调用),调用时必须放在子类构造的第一句


public class JiZhuangBox extends Box{
public JiZhuangBox(int l,int w,int h){
super(l,w,h);
System.out.println("子类的构造");
}
...
}
注意:子类中this(...)可以调用本类中的构造,在有this(...)不允许再用super(...),如果有super(...)就不允许有this(...);


子类中super.属性或者super.方法表示子类显式的调用父类属性或者方法这里super就表示父类对象

0 0
原创粉丝点击