(一).面向对象的由来:
1.60年中期软件危机(software crisis)——落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现的一系列严重问题的现象。
软禁标准化与可重用性得到了工业界的高度认可,避免重复的劳动,缓解软件危机起到了重要作用。
2.万物皆对象
看待万物都可视为对象。
3.使用面向对象思想描述显示世界
基本步骤
(1)发现类
(2)找出属性(名词)
(3)找出行为(动词)
数据抽象的过程。
定义类
//演员类
public calss Actor{
//共同特性
public String name;
public char sex;
public String job;
public int age;
//共有属性
public void eat(){
........}
public void performs(){
..........}
}
4.用类图描述类——UML
+代表public
-代表private
参考工具:StarUML,Astah(可使用破解版)。
Astah tool导出将自动生成类
小结:
面向对象的优点:全新的组织代码的方式,为大型程序而生,小程序体会不带面向对象的好处。
面向对象抽象的原则
设计一个类时,不要让该类面向具体的类,而是面向抽象类或者是接口。
(二)示例演示
需求说明
1.定义类并创建对象
2.打印对象的信息
//第一个类
//创建劳拉和孙悟空的类
//创建游戏角色类Role
public calss Role{
/*名称属性*/
public String name;
//等级
public int level;
//职业
public String job;
//释放技能
public void sendskill;
public void doSkill(){
if(name.equals("劳拉")){
System.out.println("劳拉释放了她的必杀技————隐身夺萃刃");
}else if(name.euqals("孙悟空")){
System.out.println("孙悟空释放了他的技能————吃俺老孙一棒")
}
}
}
//第二个类RoleTest
//实例化
//声明一个Role类型的变量,Role role1相当于在栈空间中申请了一块空间role1,new Role();相当于在堆空间里分配了一块空间;
Role role1=new Role();//把申请的地址赋给了role1;
role1.name="劳拉";
role1.level=25;
role.job="考古学家";
//调用方法释放劳拉的技能
role.doSkll();
//System.out.println(role1)可以打印出哈希码的值
Role role2;
role2=new Role();
role2.name="孙悟空";
role2.level=99;
role2.job="齐天大圣";
//调用方法释放孙悟空的技能
role2.doSkill();
(三)构造器的使用
构造器的特点:
1.没有返回值
2.方法名和类名一致
示例一
public Role(String name1,int level1,String job1){
name=name1;
level=level1;
job=job1;
}
//调用
Role role1=new Role("孙悟空","99","齐天大圣"){
role1.show();
}
示例二
public class Circle{
//圆的半径
public double radious;
//圆的周长
public double perimeter;
//圆的面积
public double area;
//默认构造
public Circle(){
inputRadious();
}
//带参构造
public Circlev2(double radious){
if(radious){
radious=radious();
}else{
inputradious();
}
}
public void inputradious(){
Scanner input=new Scanner(System.in);
System.out.println("请输入半径");
radious=input.next.Double();
input.close();
}
public void showPerimeter(){
if(radious==0){
inputRaius();//如果用户没输入半径,强制用户输入半径
}
perimeter=2*Math.PI*radious;
System.out.println("周长为"+perimeter);
}
public void shouArea(){
area=radious*radious*Math.PI;
System.out.println("面积为"+area);
}
}
//测试类
//(1)构造方法生成
Circlev2 circle=new Circlev2();
circle.showArea();
//(2)重载
public class CircleTest{
public static void main(String[] args){
Circle circle=new Circle();
circle.inputRadious();
circle.shouPerimeter();
circle.shouArea();
}
}