关于面向对象....起初实在C++中了解到的,从c语言的面向过程向c++的部分面向对象转变,当初还是很难理解一些概念的,比如说,封装,继承,多态,抽象,以及this指针,函数的重载等等,现在学习java,感觉可以对比式的学习他们了,现在就简要的谢谢对着一些概念的理解
类的封装,我的理解就是,首先把现实世界里的一类事物,通过自己的归纳总结,总结出他们的一些共性以及一些特性,以及他们运作时候所需要的方法,然后在计算机上用一个整体例如 class Dog{private int age;private String color;public void show(){} public void eat(){}} 这是一个简单的狗类,他有自己的特有属性(通过自己的归纳),以及有自己的方法,来让狗狗这个类生动形象而非由一些呆板数据构成的一个数据集合体,因此一个简单的狗类我们就建立好了,其实挺简单的吧!大家可以联想在java中一些基本的数据类型。例如int float short等等 在底层都是一些封装好的数据类型,int——integer .....他们有自己的数据即我们的基本数据类型,也有自己的一些方法,比如类型转化的函数tobinnarystring()将数据转化成2进制码输出,等等函数...所以说java是一门完全面向对象的语言 任何一个对象在java中 都会对应一个类
接下类就是继承 还是举一下上面那个例子,对于一个狗类,他完全可以作为一个狗类的父本,然后我们在创建一个吉娃娃类作为狗类的子类,class Jwawa extends Dog{} 其中有几个要点需要我们注意第一:我们可以不创建吉娃娃所特有的的数据类型,但是我们需要访问狗类数据类型的时候就需要我们利用狗类的方法来操作,若你想用吉娃娃类来操作狗类的数据的话就需要你将 private 改成protected 或者 public 或者 缺省型的。
第二点:关于构造方法,狗类的构造方法是缺省的,吉娃娃类可以自己写自己的构造方法,无参数的可以随便写,但是若是涉及到了数据的话 就需要自己建立属于本类的数据或者父类中有一些保护的或者共有的数据可以继承过来的,这样编译器就不会报错,
第三点:构造方法我们完成了,接下类就是一些 成员方法的实现,若是狗类里面定义了 public的show方法。而吉娃娃类需要重写这个方法(同名),必须前面加public不然编译器不识别,当然你不同名的话加不加public都没关系,当你重写了同名函数,父类的函数就会被覆盖,但是你想运行父类里面的show方法,这时候就需要super.show(),他就可以帮助你运行父类里面覆盖的一些方法,说道super,它还有另外一种方法,还是用这个类来举例 若是class Dog{private int age;private String color;public Dog(int a ){a = age;} public void show(){} public void eat(){}} 在这个狗类里面我手动加了一个构造方法,如实class Jwawa{ private float hight ;public Jwawa(int a1, float f1){a1 = age; hight = f1;}},狗类里面有了含参数构造方法,子类里面至少都有一个含有相同参数个数的构造方法在子类里面不然编译不通过,吉娃娃类大家看到了我是建立的两个参数的构造方法,这时实现吉娃娃类的构造方法的时候就不需要像我那样麻烦定义了,直接可以这样写 public Jwawa(int a, float f1){super(a);hight =f1;}这样的话对于父类构造方法有多个参数的话 我们就可以用super这一行代码就把他们解决了,代码看起来不是那么冗余
第四点:当然说道构造方法,也不得不说一下this指针了,this指针是面向对象特有的一个特性,静态的方法是没有this指针的,this指针是指向类的对象的,例如狗类的一个构造方法 public Dog(int a){this.age = a;} 当然这里的this是可以省略的,this还有另一个和super相近的作用,,当你的构造方法存在重载的时候,(等一下将重载),例如假如对于我们Jwawa类,若是含有两个构造方法,public Jwawa(int a){super(a)} public Jwawa(int a,float f1){this(a); hight =f1;}因此我们也可以在一个类里面这样书写构造方法,是不感觉很简洁呢,自己要多试试就好了
通过一个简单的案例简要的说了一说java中的一些关于继承的方法,以及注意事项,接下来我向谈一谈,重载,我理解的重就是对于java的多态性的一个体现,重载的意义就是对于两个同名函数,计算机怎么识别它 怎么利用参数去调用它,就是要靠我们正确的书写重载,例如对于狗类的里面我们书写两个含参的函数 public void eat(int a){} public void eat(int a ,String str) 这就属于函数的重载, 你对于这两个函数你可以理解为 (第一种吃法 是用于大众狗类的,第二种吃法则是用于 特定狗种的一类吃法)但是他们都是对于吃这个动作的描述,所以用同一个函数名,我们就对它进行重载,便于编译器识别,对于重载有几点识别你的方法是不是重载,第一,重载只要你的,参数个数,参数类型,顺序,只要有一个不同就是重载,其他的什么返回值不同啊,参数名不同啊统统不是函数重载。
再来讲一讲抽象,所谓抽象类,我们还是用狗类来做例子 定义一个abstract class Dog{} class Jwawa extends Dog{} class Muyangquan extends Dog{} 定义了一个狗类作为抽象的父类,吉娃娃牧羊犬这样的子类,父类的方法全部不用写,放在子类里面一一实现其中的功能,当然父类也可以定义一些数据变量供子类继承。。
我们简要的讲了一讲抽象类多的还是靠自己去尝试,接口(一种特殊的抽象),静态函数等等细节 我们后面再来探讨!下面是一些我练习的代码....
package com.jikexue.java;
public class T1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Jwawa g1 = new Jwawa(10,15.6f);
g1.show();
int c = g1.age;
System.out.println(c+(double)g1.hight);
}
}
class Dog{
public int age=10;
private String color;
// public Dog(){
// System.out.println("goujianyige1gou lei");
// }
public Dog(int a){
age = a;
}
public void show(){
System.out.println("土狗");
}
}
class Jwawa extends Dog{
float hight;
public Jwawa(int a){
super(a);
}
public Jwawa(int a,float f1){
this(a);
hight = f1;
}
public void show(){
super.show();
System.out.println("吉娃娃");
}
}