java面向对象程序设计

java是一门完全面向对象的语言,那么它就具有面向对象的特性,封装,继承,多态...

所谓封装 说简单一点就是把  各个方法属性模块化,但是你要模块化一些属性以及一些方法,那么你得弄清楚这些属性和方法是拿来做什么的

他们能实现什么功能,于是把他们封装起来用于实现一些现实的问题。

class Student{//当然我只是定义了学生一部分属性来形容学生

String name;//姓名

int age;//年龄

char sex;//性别

String[]  grade = new String[7];//假设该生是一个学生,这就是他的成绩数组



public Student(String name,int age,char sex){

this. name = name;//这里是this关键字的第一个作用,辨别构造函数里面的形参和类的成员属性,若是同名则需用this区分当然,你可以不同名,就不需要用this了

this.age = age;//this 还有一个用处我也顺便讲了吧假设 我们学生还有个班级属性,但是这种学生只有三种属性,我们还需要重载构造方法,定义具有四种属性的构造方法的时候 

                                        就可以用this(name,age,sex)当然这行代码是出现在public Student(String name,int age,char sex,String calssStu)函数里面

this.sex = sex;

Scanner input = new Scanner(System.in);

System.out.println("请输入成绩:");

for(int i =0;i<7;i++){//手动给学生成绩数组  初始化

grade[i] = input.nextInt();

}

}

public void makeFriend(){}//当然  学生还有很多方法  我就不一一实现了   看各自的需求  实习不同的功能   (建议少一点功能,不同的功能封装到不同的类,这样便于管理)

public  void showStu(){

int num ;//显示学生总成绩 

System.out.println("学生姓名:"+this.name+“学生年龄:”+age+"学生性别:"+sex);

for(String item:grade)

      sum = sum+ Iteger.valueof(item);

System.out.println("该生 期末考试成绩总分:"+sum);//临时打的代码  请勿直接用喔

}

}



那么我的 学生类就定义了差不多了,当然如果需要你还可以定一个班级类,用来增加学生,减少学生,查阅学生,那么成员变量就需要一个ArrayList的一个容器来装Student

这个可以和数组联系起来,数组用来装数字,这些容器拿来很方便的装对象,当然数组也是可以装对象的,只不过没有这些容器的所谓动态开辟空间的作用而已.....

class Myclass{

int class;//班级号

public ArrayList<Student> students = new ArrayList();

public Myclass(){//初始化班级  可以给容器里面初始化增加一个学生A  这里我就不掩饰了

}

}


然后我们还可以对班级这个类,再写一个服务于班级类的类,可以用于显示班级每个学生的成绩,当然在定义学生的时候我们可以利用二位数组把学科也定义进去,等一下我会给一个例子,大家看一下,这一系列的操作都是封装的概念吧,下面用一个刚刚我写的练习例子,创建一个学生类,学生类里面有三个科目,有三个科目的成绩,再创建一个班级类用来存放学生,最后再创建一个求班级学生 每个学生总成绩的类....

package Jave_Demo4_8;
import java.util.Scanner;

//学生类
public class Student {
String name;
int number;
String[][] classGrade = new String[3][2];


public Student(String name,int number){
this.name = name;
this.number = number;

Scanner input = new Scanner(System.in);
for (int i = 0; i < classGrade.length; i++) {
for (int j = 0; j < classGrade[i].length; j++) {
if(j == 0){
System.out.println("请输入学生第"+(i+1)+"科:");
classGrade[i][j] = input.next();
}else{
System.out.println("请输入学生该科成绩:");
classGrade[i][j] = input.next();
}
}
}

}
}


package Jave_Demo4_8;
import java.util.ArrayList;
import java.util.Scanner;


public class ClassStu {//班级类
ArrayList<Student> students = new ArrayList();


public ClassStu(){
Student stu = constructStudent();
students.add(stu);
}


public void addStu(){
Student stu = constructStudent();
students.add(stu);
}


public Student constructStudent(){
Scanner input = new Scanner(System.in);
System.out.println("创建一名学生!");
System.out.println("输入姓名:");
String str = input.next();
System.out.println("输入学号:");
int k = input.nextInt();
Student stu = new Student(str,k);

return stu;
}
}

package Jave_Demo4_8;


public class Grade {  //求成绩类

public static void getAvergeGrade(ClassStu cs){
if(cs.students.size() == 0)
System.out.println("无学生,请加入学生!");
int k=0;
int s = cs.students.size();
while(++k <= s){
int num = 0;
for (int i = 0; i < 3; i++) {
for (int j = 1; j < 2; j++) {
num = Integer.valueOf(cs.students.get(k-1).classGrade[i][j]) +num;
}
}
System.out.println("第"+k+"个学生的总成绩是:"+num);
}
}

}


然后再去主程序,测试吧.....这应该就是所谓的封装吧

然后就是 继承,其实继承在真正的实际开发应该用得比较少,最多就有一层继承,因为继承太多影响代码的可读性,比较多的应该是抽象类的继承,还有就是接口interface的实现。好了来说说继承吧,现实生活中的继承就是儿子继承父亲的财产,等一些列可以继承的东西,程序里面也是一样的

class father{

String name;

char sex;

int age;

......等等属性

}

class son extends father{

}

儿子则是无条件全部继承过来,不过唯有私有属性(方法),我们可以这样所,他们也继承过来了,但是子类无法享受,或者说子类是除了私有变量(方法)以外的所有变量方法全部继承,因此在构造子类对象的时候系统会自动构造一个父类对象,然后在调用子类的构造函数,构造子类为子类增加上自己独有的属性和方法.....但就是增加着一些列的子类独有属性和方法容易出岔子.第一,一旦父类重写了构造函数,子类中就必须重写构造函数,你可以看成构造函数无法继承,你自己不写就没有构造函数,导致没法构建对象。第二,子类中可以调用父类的已有有参构造函数super(a,b,c)这样调用,这是super的一个用处,第三,如果父类已经定义的一个属性,子类再去重新定义,并且赋予不同的值,那么父类的属性就被隐藏,只有用super.属性名可以调用它,隐藏和属性的修饰名无关....若是静态方法那么  出现子类中也有同名静态方法,那么也是隐藏哈,这是隐藏的两种情况。接下来就是成员方法的重名  但不是以前说的重载,当然重载也可以在子类中用,因为父类那边把函数都继承过来了,这里就只讨论覆盖,出现函数覆盖那么我们在子类中想用父类的同名方法就只能用super.方法名来调用,其实这里的super,this你在实际操作中还是this用的比较多对于目前来说哈,要理解也需要在实际中掌握。

最后就是多态,我觉得多态就是一个对象有多种状态嘛,比如一个父亲他可以是一个老师,也本就是一个人,等等他就扮演了很多角色这也都是继承的成果,还有就是

有一个这种用法,


Son s  = new Son();

Father f = s; 用儿子给父亲赋值,肯定嘛,儿子无条件的接受了父亲的一切,当父亲需要你献血的时候,你的血液是能无条件和你父亲匹配的   ....just  an  example

下周见..........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值