Java学习 对象

来源:互联网 发布:随手记手网页版没数据 编辑:程序博客网 时间:2024/05/03 05:23

参考自:中南工大Java.pdf

1.为什么需要类?什么是类?什么是对象?

把相同的字段封装在一起,相当于定义了一个新的数据类型,因此像int i = 0过程,首先由一个数据类型,其次有个变量,这个过程称为实例化对象,第一步在栈里查询是否有st引用,若无,则新建st,第二步在堆里new Student(),若new Student()多次,则堆里生成多个,栈里,仍是只有一个st引用

Student st;

st = new Student();

st = new Student();

类:一类事物的抽象,如桌子

对象:类的实例,具体某个事物,如我的桌子


2.引用赋值

Student st = new Student;

Student st2 = st;

实例化了两个对象,而不是一个对象,在堆里有两个new Student();因此你变我不变


3.为什么需要成员变量与成员函数?

把相同的字段与相同的方法封装起来,减少重复代码


4.什么是重载函数?overload(静态多态),函数名相同,返回类型或参数类型不同

class Calc{

int abs(int a){}

double abs(double a){}

}

5.为什么要构造函数?对类进行初始化,如果无构造函数,系统会创建一个默认的构造函数,如果我们自己定义了含有参数的构造函数,系统则不提供默认的构造函数

Customer(String name,String sex,int age){ 

    this.name = name; 

    this.sex = sex; 

    this.age = age; 



6.为什么要静态变量?

不同的对象(在堆里生成不同的对象数据,占用不同的内存)某个成员变量可以使用相同的内存,静态变量可以用过类名.变量名访问,如 Customer.bankName,


7.为什么要静态函数?

静态函数可以用类名.方法名访问,不用先new一个对象,再调用这个对象的方法,直接类名.方法名就可以调用了,如Customer.setName("张三"); 


8.为什么要静态代码块?

构造函数函数对于每个对象只执行一次,类似,静态代码块可使得多个对象的共同信息只执行一次。当类被载入时,静态代码块先被执行,且只被执行一次,静态代码块经常用来进行类属性的初始化。

class Customer{ 
    String name; 
    static String bankName; 
    static{ 
        bankName = "香港银行"; 
        System.out.println("静态代码块执行"); 
    } 


public class StaticTest5 {  
    public static void main(String[] args) { 

        Customer zhangsan = new Customer(); 

        Customer lisi = new Customer(); 
    } 
}
运行,控制台上打印:

    静态代码块执行


9.为什么需要封装?

封装不要与构造函数搞混了,构造函数是为了初始化对象,封装是指不能暴露的成员隐藏起来,不能在类的外部被直接赋值,将成员定义为私有的,在成员前加上private修饰符,然后又通过公共方法来暴露对该隐藏成员的访问,给函数加上public修饰符,将方法定义为公共的。即防止成员被直接赋值但可以被访问。

class Customer { <span style="white-space:pre"></span>String name; <span style="white-space:pre"></span>String sex; <span style="white-space:pre"></span>private int age; //age不能在类的外部直接被赋值<span style="white-space:pre"></span>public void setAge(int age){ <pre name="code" class="plain"><span style="white-space:pre"></span>//age不能在类的外部直接被赋值,经过处理
if(age<0||age>100){ System.out.println("age无法赋值"); return;}this.age = age;}

<span style="white-space:pre"></span>//public方式被访问  <span style="white-space:pre"></span>public int getAge(){ <span style="white-space:pre"></span>return this.age; <span style="white-space:pre"></span>}<span style="white-space:pre"></span> } 


10.访问控制修饰符,修饰成员、方法、类

private < default(不写的时候,默认为default) < protected < public

private 类的内部被访问访问

default 类所在包内的所有类访问

protected 类所在包内的所有类及其子类访问

public 被包内包外的所有类防伪标

注意:public修饰类,该类就是一个公共类,可被包内包外的所有类访问,但是不是说不new一个类就可用 类名.方法名访问(这个是static修饰的结果),但是也不是只要static就可以被所有包外包内的类访问,要是修饰符不是Public 包外的类就访问不到这个类,即使是static修饰也没用。一般性公共类由public static修饰,这样方法一直在内存中且存取不用new对象。


11.什么是类中类?

类中类:在类的内部定义了类,也叫内部类,内部类可访问外部类中的成员


12.为什么需要继承?

共同的特性很多,只是成员的内容不同。即字段名相同,字段的内容不同,与为什么要有类的区别?类的提出背景,定义一个类相当于定义了一个数据类型,类似于C中的结构体,而继承的意思是,父类某些特性,子类也有,但是子类与父类有不同,如父类有show()方法打印父类名,子类也有show()方法打印子类名。

本质上讲,子类继承父类后,实例化子类的时候,系统首先实例化父类对象,再实例化子类对象。

子类继承父类,父类里的成员、方法子类也能用,当然父类里的子类修饰符要protected及以上,若为private 则访问不了


13.什么是成员覆盖?

override,子类重写父类的方法,作用为在不改变源码的情况下,对一个模块的功能进行改造


14.什么是多态?

重载是多态的一种为静态多态,动态多态的理论基础为:父类引用可以指向子类对象,List list = new ArrayList();,list.XXX()先掉哦那个子类方法,子类中没有该方法才会调用父类中的方法


15.为什么需要抽象类?抽象类除了抽象方法外与普通类差不多,可以有普通成员函数、成员变量、常量等

有abstract修饰的方法的类为抽象类(无抽象成员,只有抽象方法),说明该抽象方法一定要被继承它的子类重写

抽象类特点:

类不能被new(实例化),而是被继承

抽象方法必须被重写,除非子类也是抽象类

抽象类中也可含有普通成员函数

抽象类不能被实例化,因此抽象类无构造函数,要被类继承。。。


16.为什么需要接口?

类里的接口全部为抽象方法,方法前不用写abstract

接口里的变量为public static final 类型,方法为public 类型






0 0
原创粉丝点击