1、什么是面向对象
Java语言就是面向对象的语言。要使用Java进行面向对象编程,首先建立一个面向对象的思想。面向对象是一种直观而且程序结构简单的程序设计方法。它比较符合人类认识现实世界的思维。
基本思想:把问题看成若干对象的组成,这些对象之间是独立的,但是他们之间又可以相互配合,连接和协调,从而共同完成整个程序实现的任务。
面向对象有三大特征:封装、继承、多态
2、什么是对象?
对象就是用来描述客观事物的一个实体。用面向对象的方法解决问题,需要对现实世界中的对象进行分析与归纳,找出哪些对象与解决问题的关联。
例如手机:像华为、小米、苹果,把这些看成对象
但是他们的之间具有不同特征,具体来说就是品牌、价格、性能不同
3、什么是类?
上面所提到的手机对象之间具有一些共同的特征(属性):都有触摸屏,都有扬声器等、
还有一些共同的功能(或行为):能打电话,能拍照等
把这些共同的特征和共同的行为组织到一起,就得到类
类是具有相同的属性和方法的一组对象集合。类定义了对象将会拥有一些特征"属性"和行为"方法"
一个类给出了他的全部对象的的一个统一的定义,而他的每个对象则都是符合这种定义的一个实体
因此类和对象的关系就是抽象和具体的关系。类是多个对象进行综合的抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例
3、类的定义
面向对象的设计就是一个抽象的过程。
1.发现类,类定义了对象将会拥有的特征(属性)和行为(方法)。
2.发现类的属性,对象拥有的静态特征在类中表示时称为类的属性。
3.发现类的方法,对象执行操作称为类的方法
类
例:定义一个Person类
[访问修饰符] class 类名{
...//类的内部代码
}
访问修饰符:如public、private等
class表示声明类的关键字
类名首字母要大写
属性
Java中的类的内部主要就包括属性和方法,对象所拥有的特征在类中称为属性。
定义属性的语法格式:
[访问修饰符] 数据类型 属性名;
访问修饰符可以选的
除了访问修饰符之外,其他的语法和声明变量属性
方法
对象执行操作的行为称为方法
定义方法的语法格式:
[访问修饰符] 返回类型 方法名称(参数类型 参数名1,参数类型2 参数名2...){
//方法体代码
}
在定义行为(方法)时:
1.访问修饰符可以选择
2.返回的类型可以是void,返回类型是void时,表明没有返回值,方法体中不必使用”return“关键来返回具体数据,但是可以使用”return“关键字来退出方法
3.返回类型不是void,那么再方法体中一定要使用”return“关键字,返回对应类型的结果,否则程序会出现编译错误。
4.当需要在方法执行时,为方法传递参数时,则需要参数列表,如果不需要参数传递,参数列表可以省略不过小括号不能省略,传递多个参数使用“,“分隔。一个完整的简单Person类
public class Person {
public String name; //定义声明一个name属性
public String sex; //定义声明一个性别属性
public int age; //定义年龄
//Person类的一个工作行为()方法
public void year(){
System.out.println("一个三体123");
}
对象的创建和使用
1、创建对象
类是一个事物的集合和抽象,代表这类事物共有的属性和方法,以后个对象称为类的实例,是类的一次实例化的结果,例如”张三“ 一个”Person“类的具体对象。
类的对象可以调用类中的成员,如属性,方法
创建对象的语法格式:
类名 对象名=new 类名();
new 是关键字
左边类名为对象的数据类型
右边类名称为类的构造方法
public static void main(String[] args) {
//创建一个Person对象,对象名为person
//person就是Person类的一个对象实例
Person person = new Person();
person.name="张三";//调用对象的name属性
person.gender="男";//调用对象的gender属性
person.age =18; //调用对象的age属性
person.year(); //调用对象的work方法
//一个类中可以创建多个对象!
Person person1 = new Person();
Person person2= new Person();
...
}
使用Java中的对象
在java中,要引用对象的属性和方法,需要"."
使用java对象的语法格式:
对象名.属性 //引用对象的属性
person.name="张三";//调用对象的name属性
对象名.方法 //引用对象的方法
person.year(); //调用对象的work方法
带参数的方法
每个人都不一样
所以在Person类中定义不同的方法
public class Person{
public String name;
public String gender;
public int age;
//无参的工作方法
public void year(){
System.out.println(this.name+"十: 1");
}
//有参的工作方法
public void year(String contect){
System.out.println(this.name+"个十:"+contect);
}
//带有返回值的无参方法
public String years(){
return "实现自由";
}
}
带有参数的year()方法可供用户自己输入内容。
创建year方法时定义的参数 (String contect)叫形式参数,简称形参。
在调用year方法时用户输入并传入的参数为实参。
方法重载:
方法重载是指一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或者参数个数。
特点:
1、在同一个类中
2、方法名相同
3、参数个数或者类型不同
4、方法的返回值不能作为判断方法是否构成重载的依据
构造方法
Java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法
1.构造方法的定义
构造方法的主要作用是进行一些数据的初始化
定义构造方法的语法格式如下。 [
[访问修饰符] 方法名(参数列表){
//方法体的代码
}
1).构造方法没有返回值
2).默认构造方法没有参数,因此参数列表可选
3).构造方法的方法名与类名相同
例:
为Person类定义一个构造方法
public class Person {
public String name;
public Person(){
this.name="张三";
}
}
Person的构造方法的作用是当Person类的对象创建时,将这个对象的name属性设置为“张三”。
当开发人员没有编写自定义构造方法时,Java会自动默认添加构造方法,默认构造方法没有参数。
若自定义了一个或者多个构造方法,则Java不会自动添加默认构造方法。
2.构造方法重载
构造方法也可以重载,即在同一个类中可以定义多个重载的构造方法。
public class Person {
public String name;
public String gender;
public int age;
public Person(){ //无参的构造方法
this.name="张三";
}
public Person(String name){
this.name=name; //带参数构造方法
}
}
3.4 this关键字
(1)this.属性名
表示本对象自己的属性使用this调用成员变量,解决变量和局部变量的同名冲突
(2)this.方法名
表示本对象自己的方法
我们给Person类增加了一个”打招呼”的方法叫做greet。在introduce方法当中,就可以通过”this.方法名”的方式来调用这个方法,表示调用的是”本对象自己的greet”方法。这是this关键字的第二种用法。当然,在introduce方法中并没有出现其他对象,所以方法名前面的this关键字也可以省略不写。
public void greet(){
System.out.println("hello,大家好");
}
public void introduce(){
this.greet();
System.out.println("我叫"+name+",今年"+age+"岁");
}
(3)this()
在this关键字的后面加上小括号,这样就表示调用了某个类自身的构造方法
//构造方法1
public Person(String name,int age,double height){
this(name,age); //调用构造方法2
this.height=height;
}
//构造方法2
public Person(String name,int age){
this.name=name;
this.age=age;
}
(4)外部类名.this.属性
this关键字在我们编写内部类代码的时候,还有一种用途,那就是区分属性或方法的具体归属
public class Outter {
public int a=0; //外部类的属性
class Inner{
public int a=10;//内部类的属性
public void printA(){
System.out.println(a);//调用内部类的a属性,输出10
System.out.println(this.a);//调用内部类的a属性,输出10
System.out.println(Outter.this.a);//调用外部类的a属性,输出0
}
}
}
因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法,不能调用类变量和类方法,也不能调用局部变量