面向对象基础(一)
什么是面向对象?
1. 面向对象是一种编程方法;
2. 面向对象是一种思维方式;
3. 面向对象不是一种编程语言。
应该如何学习面向对象?
1. 掌握一门面向对象语言的语法;
2. 掌握面向对象的思维方式;
3. 熟悉面向对象设计原则;
4. 掌握面向对象设计模式。
面向对象的思维方式?
什么是面向对象思维方法?
1. 首先确定谁来做,其次确定怎么做;
2. 首先考虑整体,其次考虑局部;
3. 首先考虑抽象,其次考虑具体。
总结:
1. 不要认为掌握了一门面向对象语言就是掌握了面向对象;
2. 习惯于将面向对象与现实世界做比较。
其实,所谓的面向对象就是实际生活中我们的思维方式;
学习秘诀:拥有一颗面向对象的心。 面向对象的终极目标:减少重复代码
面向对象基础(二)
1. 创建类的方法
定义类的方法:
class 类名
{
属性;
方法;
}
属性也叫成员变量,主要用于描述类的状态
方法也叫成员方法,主要用于描述类的行为
|
Dog |
||
color
name |
||
jump() |
eg:
class Person
{
int age;
void shout()
{
System.out.println(“oh,my god! Iam”+age);
}
}
age是类的属性,也叫类成员变量
shout是方法也叫类的成员函数
shout方法可以直接访问同一个类中的age变量,如果一个方法中有与成员变量同名的局部变量,该方法中对这个变量名的访问是局部变量,而不再是成员变量
2. 创建对象的方法
生成对象的方法:
格式:类名 对象名=new 类名();
例如: Dog dog = new Dog();
ps:对象的本体存储于堆内存中,而对象的引用存储于栈内存中。
1) Dog d = new Dog();
创建一个Dog的引用
2) Dog d = new Dog();
创建一个Dog的对象
3) Dog d =new Dog();
将创建的Dog对象赋给这个引用
3. 对象和对象的引用
类和对象的关系
总结:
类是抽象的概念,对象是具体的个体。
面向对象基础(三)
1. 对象的使用方法;
使用对象调用变量和函数:
1) 对象.变量
2) 对象.函数()
eg:
Dog.java:
class Dog{
String name;
int age;
String color;
void jump(){
System.out.println(“jump”);
}
}
Test.java:
class Test{
public static void main(String args[]){
Dog d = new Dog();
d.name = “旺财”;
d.age = 2;
d.color = “黑色”;
d.jump();
System.out.println(“名字是” + d.name);
}
}
2. 多对象的创建方法;
生成多个对象:
Dog d1 = newDog();
Dog d2 = newDog();
eg:
更改Test.java:
class Test{
public static void main(String args[]){
Dog d1 = new Dog();
Dog d2 = new Dog();
d1.name = “旺财”;
d2.name = “小黄”;
d1.jump();
d2.jump();
System.out.println(“名字是” + d1.name);
System.out.println(“名字是” + d2.name);
}
}
3. 匿名对象的创建和使用方法;
匿名对象的使用:无对象名
可以不定义对象的引用名称,而直接调用这个对象的方法。这样的对象叫做匿名对象,比如:
new Dog().jump();
凡是见到new,就会在堆内存中生成一个新的对象; 匿名对象只能使用一次,之后不能被找到。
面向对象基础(四)
1. 函数的重载
eg:
A.java:
class A{
void funA(){
System.out.println(“没有参数的funA函数”);
}
void funA(int i){
System.out.println(“拥有一个整型参数的funA函数”);
}
}
Test.java:
class Test{
public static void main(String args[]){
A a = new A();
a.funA();
a.funA(10);
}
}
重载:同一种行为对应不同的实现。
重载的定义:
1) 两个或者多个函数在同一个类当中;
2) 函数名相同;
3) 参数列表不同。
2. 构造函数的作用
Person.java:
class Person{
Person(String n,int a){
name = n;
age = a;
}
String name;
int age;
}
Test.java:
class Test{
public static void main(String args[]){
Person person1 = new Person(“zhangkuan”,24);
Person person2 = new Person(“shuiyue”,23);
System.out.println(“person1的姓名:” + person1.name + “person1的年龄:” + person1.age);
System.out.println(“person2的姓名:” + person2.name + “person2的年龄:” + person2.age);
}
}
A. 构造函数的函数名必须和类名相同;
B. 构造函数没有返回值类型的定义;
C. 使用new调用构造函数;
D. 如果类中没有定义构造函数,则编译器将自动产生参数为空且方法体也为空的构造函数;
E. 在类中,如果自己已经定义了构造函数,则编译器不会再自动产生构造函数。