------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
面向对象
2.1.2 面向对象的概念
面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。面向过程强调的是每一个功能的步骤,代表语言:C语言。面向对象强调的是对象,然后由对象去调用功能,代表语言:Java、C++、C#。
例子:把大象装进冰箱。用面向过程实现:1. 打开冰箱。2. 存储大象。3. 关上冰箱。"打开"、"存储"、"关上"都是功能行为,在代码中的直观体现就是函数或者方法,这就是一种面向过程的以功能行为为主体的思想体现。用面向对象实现:1. 冰箱打开。2. 冰箱存储。3. 冰箱关闭。可以看到,所有的操作都是以"冰箱"为主体,而不是功能行为。也就是说冰箱自己已经具备"打开"、"存储"、"关上"的行为功能,我们只需要让冰箱执行它具备的功能就可以了。这就是一种面向对象的以执行功能的对象为主体的思想体现。
2.1.2
面向对象的特点
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。
完成需求时:
1. 先要去找具有所需功能的对象来用。
2. 如果该对象不存在,那么创建一个具有所需功能的对象。
2.1.3
面向对象开发,设计,特征
开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
设计的过程:其实就是在管理和维护对象之间的关系。
面向对象的特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
class Phone{ //品牌 String brand; //价格 int price; //颜色 String color; //打电话的方法 public void call(String name){ System.out.println("给"+name+"打电话"); } //发短信方法 public void sedMessage(){ System.out.println("发短息"); } } class PhoneDemo{ public static void main(String[] args){ //创建手机对象 Phone p = new Phone(); //直接输出成员变量的值 System.out.println(p.brand+"---"+p.price+"---"+p.color); //给成员变量赋值 p.brand = "一加"; p.price = 1999; p.color = "black"; //再次输出 System.out.println(p.brand+"---"+p.price+"---"+p.color); //调用方法 p.call("classmate"); p.sedMessage(); } }运行结果:
class Variable{ int num;//成员变量,默认初始化值为0 public void show(){ int num = 2;//局部变量 System.out.println(num); int num2 = 1;//局部变量 System.out.println(num2); } } class VariableDemo{ public static void main(String[] args){ Variable v = new Variable(); System.out.println(v.num);//访问成员变量 v.show(); } }运行结果:
//基本数据类型参数传递 class Demo { public static void main(String[] args){ int x = 3; show(x); System.out.println("x=" + x); } public static void show(int x){ x = 4; } }运行结果:
//引用数据类型参数传递 class Demo { int x = 3; public static void main(String[] args){ Demo d = new Demo(); d.x = 9; show(d); System.out.println(d.x); } public static void show(Demo d){ d.x = 4; } }运行结果:
class Student{ public void show(){ System.out.println("我爱学习"); } } class StudentDemo{ public void method(Student s){ s.show(); } } class NoNameDemo{ public static void main(String[] args){ //带名字对象的调用 Student s = new Student(); s.show(); System.out.println("--------------"); //建立一个匿名对象 new Student(); //匿名对象调用方法 new Student().show(); System.out.println("--------------"); //匿名对象作为实际参数传递 StudentDemo sd = new StudentDemo(); //匿名对象的使用 sd.method(new Student()); //匿名对象的使用 new StudentDemo().method(new Student()); } }运行结果:
class Student{ private String name; private int age; //年龄的获取 public int getAge(){ return age; } //年龄的赋值 public void setAge(int a){ age = a; } //姓名的获取 public String getName(){ return name; } //姓名的赋值 public void setName(String n){ name = n; } } //测试类 class StudentTest{ public static void main(String[] args){ //创建学生类对象 Student s = new Student(); //使用成员变量 //System.out.println(s.name+"---"+s.age); System.out.println(s.getName()+"---"+s.getAge()); //直接给成员变量赋值 //s.name=classmate; name是Student类的私有成员,外部无法直接对其赋值 //s.age=22; age是Student类的私有成员,外部无法直接对其赋值 //通过方法给成员变量赋值 s.setName("classmate"); s.setAge(22); System.out.println(s.getName()+"---"+s.getAge()); } }运行结果:
class Student { private String name; //null private int age; //0 public Student() { System.out.println("这是构造方法"); } public void speak(){ System.out.println("name:"+name+",age:"+age); } } class ConstructDemo { public static void main(String[] args) { //创建对象 Student s = new Student(); System.out.println(s); //Student@e5bbd6 s.speak(); } }
class Person{ private String name; private int age; private Person(){ } private Person(String name){ this();//this语句只能定义在构造函数的第一行,因为初始化时要先执行。 this.name = name;//用this区分后,前面的name就是成员变量,后面的name就是局部变量。 } Person(String name,int age){ //this.name = name; this(name);//this语句只能定义在构造函数的第一行,因为初始化时要先执行。 this.age = age; System.out.println("name:"+ name +",age:"+ age); } } class PersonDemo4{ public static void main(String [] args){ Person p = new Person("lisi",30); } }
class Person{ String name;//成员变量,也叫实例变量。 static String country = "CN";//静态的成员变量,也叫类变量。 public void show(){ System.out.println(name+"::"+country); } } class StaticDemo{ public static void main(String [] args){ Person p = new Person(); p.name = "zhangsan"; p.show(); System.out.println(p.country);//被对象调用 System.out.println(Person.country);//被类调用 } }运行结果:
class Person{ String name; static String country = "CN"; //静态方法 public static void show(){ System.out.println(country + ":" + name); } }编译时会报错:
import java.util.Scanner; class Demo{ public int sum(int a,int b){ return a+b; } } class Test{ public static void main(String[] args){ //创建键盘录入对象 Scanner sc = new Scanner(System.in); System.out.println("请输入第一个数:"); int a = sc.nextInt(); System.out.println("请输入第二个数:"); int b = sc.nextInt(); //创建对象 Demo d = new Demo(); System.out.println("两数之和为:"+d.sum(a,b)); } }运行结果:
<span style="font-size:18px;">import java.util.Scanner; class Rectangle{ private int length;//定义成员变量长 private int width;//定义成员变量宽 public void setLength(int length){ this.length = length; } public void setWidth(int width){ this.width = width; } //获取周长 public int getPerimeter(){ return 2*(length + width); } //获取面积 public int getArea(){ return length*width; } } class Test2{ public static void main(String[] args){ //创建键盘录入对象 Scanner sc = new Scanner(System.in); System.out.println("请输出长方形的长:"); int length = sc.nextInt(); System.out.println("请输出长方形的宽:"); int width = sc.nextInt(); //创建对象 Rectangle r = new Rectangle(); //对长进行赋值 r.setLength(length); //对宽进行赋值 r.setWidth(width); System.out.println("长方形的周长:"+r.getPerimeter()); System.out.println("长方形的面积:"+r.getArea()); } }</span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/xw_classmate/article/details/47185563