您的位置:首页 > 编程语言 > Java开发

JAVA基础知识之我的理解 2(持续更新中,希望对大家有帮助,共同学习共同进步)...

2012-07-23 18:15 357 查看
一. 类的继承
下定义:在构造一个新的类时,首先找到一个已有的类,新类在这个已有类的基础上构造,这种特性我们称之为继承,也可以称作派生(derived)。继承使用关键字extends声明。继承出的类称为原来类的子类,而原来类被称为父类
具体继承:1)父类的所有非private属性
2)父类所有的非private方法
继承的结果:在子类中即使我们没有创建任何属性和方法,他仍会有父类的所有非private属性和方法,换句话在子类中可以直接调用这些方法及属性。
怎么继承:看一个具体的例子
public class Sudent{
属性;
方法;
}
public class unStudent extends Student{

}
归纳格式: public class 子类名 extends 父类名{

}

补充:类的继承具有传递性:如果B是A的子类,C是B的子类,则C是A的子类。

二. 方法的重载与重写

方法的重载:指多个方法具有相同的名字,但是这些方法的参数必须不同(或者是参数的个数不同,或者是参数类型不同,顺序不同)。需要强调的是方法重载是在同一各类内部重载。

方法的重写:与重载两点不同
1. 重写发生在子类,即子类重写父类的方法
2. 子类重写的方法名字和参数返回类型和父类的方法都一样,方法体可以根据需要进行修改,重载是对参数的修改。
三. 自动转型的实现
自动转型格式:声明父类的变量,创建子类对象,让父类的变量指向子类对象,子类对象类型会自动转型为父类


class A//父类
class B extends A//子类B继承父类
A b = new B();//A对象自动转型为B类型
父类 对象名 = new 子类();
注意:该格式中父类和子类的位子,等式左边是父类右边是子类,一定不能写反。
自动转型后的结果: 1.自动转型后的对象调用父类方法,如果子类重写了此方法,调用的就肯定是重写后的方法
2.如果子类自动转型为父类后,再无法调用到子类所特有的方法
举例说明以上两点:
现在我们有一个学生类(父类),一个大学生类(类)学生类有一个学习方法,大学生类也有一个重写过的属于他的学习方法,即他所独有的选课方法。
现在我们将大学生类自动转型为学生类,那么结果是:
1.转型后的大学生调用学习方法仍是重写过的大学生学习方法。

2. 转型后的大学生不能再选课。

四. 多态的概念和理解
多态的概念:将参数定义为一个父类,各子类中都重写了父类的方法,在方法中用传入的父类对象调用这个方法。当传入什么子类时就会调用相应的各子类的方法。这就是多态。即同一个类型的对象调用方法名一样而结果不一样的情况称为多态
多态的理解:导致多态的直接原因是方法的重写,而方法的重写发生在类的继承
多态的结果:同一个类型的对象调用同一名字的方法但结果不一样
五. 浅谈类,接口,抽象类的理解
类的定义前面已经说过就不再赘述重点说一下接口和抽象类。
接口的概念:接口(interface)是抽象方法和常量值定义的集合,这个概念咋一看我们一定会想到类的概念,没错他们的确有相似性,类可以理解是方法和属性的集合嘛,但接口和类是不同的,不同点体现在以下两点:
1) 从属性方面看
类的属性定义既可以是变量也可以是常量,接口属性定义只能是常量(可以通过初始化实现);
类属性的权限可以是:public protected private而接口属性的权限只能是:public;
有代码有真相
类的属性 string name;
接口的属性 public static final double PI=3.1415926;
2) 从方法方面看
我们都知道普通类的方法都是有方法体的,而接口恰恰相反,接口的方法一定不可以有方法体。通常这类方法我们称之为抽象方法。也正是由于这个原因,接口不能定义对象。
上真相:
普通类的方法:public void study() {

}
接口的方法:public abstract void study();
提醒:注意接口方法定义时的关键字abstract,当然在接口中你定义方法时可以不写它,但系统会默认为abstract,他表示抽象类方法。还要注意抽象方法必须以“;”结尾。
接口的意义:接口在开发大规模企业应用中起着重要作用。使服务的实现者和使用者最大程度松耦合。使用者可以使用任何遵循接口的实现。
(表示到目前为止比这还没有体会到这一点,因为还是阶段项目做得不是很多,但为了知识体系的相对完整我们先把它放在这,待笔者有了体会再对这部分内容完善)

抽象类的概念: 抽象类(abstract class)是介于类和接口之间的一种特殊类型,下面我们也将从属性和方法两个方面来看。
1) 从属性方面来看
抽象类属性的定义和类的属性的定义相同;
2) 从方法方面来看
抽象类中不仅包含抽象方法,还可以包括具体数据和方法。也是由于抽象类中有抽象方法所以他也不能定义对象。
抽象类的意义:过渡,接口和普通类间的中介。

“横看成岭侧成峰,远近高低各不同”同一个事物从不同的角度看,看到的风景是不一样的,上面我们是单纯从属性和方法的角度分析了三者,下面我们换一个角度,我们从继承的角度看三者的关系。
1) 类继承类
这点我们在上面已经讲得很清楚了,不再赘述。
2)类继承接口
上面我们已经知道了接口中的方法均为抽象方法,在类继承接口时必须将接口中所有方法均实现;
一个类可以继承多个接口,这点与类继承类不同;
类继承类关键字为extends,类继承接口时关键字implements;
有代码有真相:
public class Shape implements NetJavashape
3) 类继承抽象类
类继承抽象类只需要实现需要用到的方法,不必将每个方法都重写;
类继承抽象类关键字认为extends;
4) 接口继承接口
接口可以继承接口..但是要使用extends而不是用implements
如:interface a{}
interface b extends a{}
一个接口可以继承多个接口.
interface C extends A, B {}是可以的
5) 抽象类继承接口
抽象类继承接口可以只实现要用的方法;
抽象类继承接口关键字implements
5) 抽象类继承类
抽象类可以继承类,在继承过程中可以把类中的方法重写成抽象方法。
抽象类继承类关键字为extends
有代码有真相:
package test;

public class A {

public void print(){
System.out.println("A");
}
}

package test;

public abstract class B extends A{
public abstract void print();
}

7)抽象类继承抽象类
抽象类继承抽象了的关键字为extends;
这种情况仅在一下这种情况下发生才有意义,父(抽象)类有一个以上的抽象方法,子(抽象)类只实现了父(抽象)类中的部分抽象方法。
有代码有真相:
Abstract class A{
public void afunction();}
Abstract class B extends A{
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: