黑马程序员_Java基础_面向对象

来源:互联网 发布:网络填表信息采集 编辑:程序博客网 时间:2024/04/28 23:50

一、面向对象(类和对象的关系)

面向对象的三个特征:封装,继承,多态。

以后开发:找对象,建立对象,使用对象,维护对象的关系。

 

类和对象的关系:类是对象的抽象,对象是类的具体实现。

 

现实生活中的对象:张三,李四。

描述:提取对象中的共性内容。对具体的抽象。

描述时:这些对象的共性有:姓名,年龄,性别,学习java功能。

映射到java中,描述就是class定义的类。

集体对象就是对应java在堆内存中用new建立的实体。

 

类就是对现实生活中事物的描述。

对象就是这类事物,实实在在存在的个体。

 

[java] view plaincopy
  1. /* 
  2. 定义一个简单的汽车类 
  3. */  
  4.   
  5. class Car  
  6. {  
  7.     String color="蓝色";//定义颜色  
  8.     String name="奔驰";//定义品牌  
  9.     int num=4;//定义轮胎数  
  10.       
  11.   
  12.     void run()  
  13.     {  
  14.         System.out.println("品牌:"+name+"\n颜色:"+color+"\n轮胎数:"+num);  
  15.     }  
  16. }  
  17.   
  18. class  CarDemo  
  19. {  
  20.     public static void main(String[] args)   
  21.     {  
  22.         Car c=new Car();//在堆中产生一个实体(汽车)。在栈中产生Car类型c变量并指向实体。  
  23.         c.color="红色";//更改对象c的color属性的值为"红色"。  
  24.         c.run();//调用对象c的run()方法。  
  25.     }  
  26. }  


 

二、面向对象(成员变量和局部变量)

作用范围:

成员变量作用于整个类中,局部变量作用于函数中或者语句中。

成员变量:在堆内存中,因为对象的存在,才在内存中存在。

局部变量:在栈内存中。

 

三、面向对象(匿名对象)

例如:

new Car().num=5;

new Car.run();

这样并没有指明对象的名称(也就是引用)。

 

匿名对象使用方式1:当对象的方法值调用一次,可以用匿名对象,这样比较简化。

如果对一个对象进行多个成员调用,必须给这个对象起名字。

匿名对象使用方式2:可以将匿名对象作为实际参数进行传递。

 

四、面向对象(封装)

概念:是隐藏对象的属性和方法的实现细节。

 

[java] view plaincopy
  1. /* 
  2. Private访问修饰符 
  3. */  
  4. class Person  
  5. {  
  6.     private String name="杨成";  
  7.     private int age=18;  
  8.       
  9.     public void setAge(int a)//设置age函数  
  10.     {  
  11.         if(a>0&&a<300)  
  12.         {  
  13.             age=a;  
  14.         }  
  15.         else  
  16.             System.out.println("修改年龄错误!");  
  17.     }  
  18.     public int getAge()//获得age  
  19.     {  
  20.         return age;  
  21.     }  
  22.     void display()//没写修饰符,表示默认。可以被同包不同类访问。  
  23.     {  
  24.         System.out.println("name:"+name+"\nage:"+getAge());  
  25.     }  
  26. }  
  27. class PersonDemo  
  28. {  
  29.     public static void main(String[] args)   
  30.     {  
  31.         Person p=new Person();  
  32.   
  33.         //p.age=30;  //不能在Person类外访问其私有成员属性  
  34.         p.setAge(21);  
  35.         p.display();   
  36.   
  37.     }  
  38. }  


 

五、面向对象(构造函数)

作用:用来初始化对象的成员变量。

注意:

1.       与类名同名

2.       没有返回值类型

3.       不可写return语句

 

提醒:同名构造函数通过形参的类型和形参的数目进行区分。

 

当一个类中没有定义构造函数时,系统会默认向类加入一个空参数的构造函数。

构造函数是在对象已建立就运行,给对象初始化。而类里面的一般函数是对象经过调用执行的。

一个对象建立构造函数只执行一次。而里面的一般函数可被该对象调用多次。

 

[java] view plaincopy
  1. /* 
  2. 构造函数 
  3. */  
  4. class Person  
  5. {  
  6.     private String name="杨成";  
  7.     private int age=18;  
  8.       
  9.     Person()//不带参数构造函数  
  10.     {  
  11.         System.out.println("不带参数构造函数\n"+"name:"+name+"\nage:"+age);  
  12.     }  
  13.   
  14.     Person(String n)// 带一个参数构造函数  
  15.     {  
  16.         name=n;  
  17.         System.out.println("带一个参数构造函数\n"+"name:"+name+"\nage:"+age);  
  18.     }  
  19.     Person(String n,int a)// 带两个参数构造函数  
  20.     {  
  21.         name=n;  
  22.         age=a;  
  23.         System.out.println("带两个参数构造函数\n"+"name:"+name+"\nage:"+age);  
  24.     }  
  25.     void display()  
  26.     {  
  27.         System.out.println("name:"+name+"\nage:"+age);  
  28.     }  
  29. }  
  30. class PersonDemo  
  31. {  
  32.     public static void main(String[] args)   
  33.     {  
  34.         Person p1=new Person();//采用不带参数构造函数初始化  
  35.         Person p2=new Person("张三");//采用带一个参数构造函数初始化  
  36.         Person p3=new Person("张三",22);//采用带两个参数构造函数初始化  
  37.   
  38.         //p.age=30;  //不能在Person类外访问其私有成员属性  
  39.         //System.out.println();//换行  
  40.         p1.display();   
  41.         p2.display();  
  42.         p3.display();  
  43.   
  44.     }  
  45. }  


 

六、面向对象(构造代码块)

作用:给对象进行初始化。

对象一建立就运行,而且优先于构造函数执行。

和构造函数的区别:

构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象分别初始化。

 

[java] view plaincopy
  1. /* 
  2. 构造代码块 
  3. */  
  4. class Person  
  5. {  
  6.     private String name="杨成";  
  7.     private int age=18;  
  8.   
  9.     {  
  10.         System.out.println("构造代码块。");  
  11.     }  
  12.       
  13.     Person()  
  14.     {  
  15.         System.out.println("不带参数构造函数\n"+"name:"+name+"\nage:"+age);  
  16.     }  
  17.   
  18.     Person(String n)  
  19.     {  
  20.         name=n;  
  21.         System.out.println("带一个参数构造函数\n"+"name:"+name+"\nage:"+age);  
  22.     }  
  23.     Person(String n,int a)  
  24.     {  
  25.         name=n;  
  26.         age=a;  
  27.         System.out.println("带两个参数构造函数\n"+"name:"+name+"\nage:"+age);  
  28.     }  
  29.     void display()  
  30.     {  
  31.         System.out.println("name:"+name+"\nage:"+age);  
  32.     }  
  33. }  
  34. class PersonDemo  
  35. {  
  36.     public static void main(String[] args)   
  37.     {  
  38.         Person p1=new Person();//采用不带参数构造函数初始化  
  39.         Person p2=new Person("张三");//采用带一个参数构造函数初始化  
  40.         Person p3=new Person("李四",23);//采用带两个参数构造函数初始化  
  41.         System.out.println();//换行  
  42.         p1.display();   
  43.         p2.display();  
  44.         p3.display();  
  45.   
  46.     }  
  47. }  


七、面向对象(this关键字)

this就是本类的对象,用来区分同名变量的。

[java] view plaincopy
  1. /* 
  2. this关键字 
  3. */  
  4. class Person  
  5. {  
  6.     private String name="杨成";  
  7.     private int age=18;  
  8.   
  9.     Person(String name)  
  10.     {  
  11.         this.name=name;//出现同名name,用this指定本类对象。  
  12.         System.out.println("带一个参数构造函数\n"+"name:"+this.name+"\nage:"+this.age);  
  13.     }  
  14.     Person(String name,int age)  
  15.     {  
  16.         this.name=name;//出现同名name,用this指定本类对象  
  17.         this.age=age;//出现同名age,用this指定本类对象  
  18.         System.out.println("带两个参数构造函数\n"+"name:"+this.name+"\nage:"+this.age);  
  19.     }  
  20.     void display()  
  21.     {  
  22.         System.out.println("name:"+name+"\nage:"+age);  
  23.     }  
  24. }  
  25. class PersonDemo  
  26. {  
  27.     public static void main(String[] args)   
  28.     {  
  29.         Person p1=new Person("张三");//采用带一个参数构造函数初始化  
  30.         Person p2=new Person("李四",22);//采用带两个参数构造函数初始化  
  31.       
  32.         System.out.println();//换行  
  33.         p1.display();   
  34.         p2.display();  
  35.     }  
  36. }  


 

八、面向对象(this关键字的应用)

[java] view plaincopy
  1. /* 
  2. 给人定义一个用于比较年龄是否相同的功能。 
  3. */  
  4. public boolean compare(Person p)//判断功能代码  
  5. {  
  6.     return this.age==p.age;/*先逻辑判断,在返回逻辑值。 
  7.                             this.age表示本类的age, 
  8.                             p.age表示传递其它对象的age. 
  9.  
  10.                            */  
  11. }  


 

九、面向对象(this关键字在构造函数间调用)

this语句用于构造函数之间进行互相调用。

this语句只能定义在构造函数的第一行。因为初始化要先执行。

 

[java] view plaincopy
  1. /* 
  2. this关键字在构造函数间的调用 
  3. */  
  4. class Person  
  5. {  
  6.     private String name;  
  7.     private int age;  
  8.   
  9.     Person()  
  10.     {  
  11.           
  12.     }  
  13.     Person(String name)  
  14.     {  
  15.         this();  
  16.         this.name=name;  
  17.     }  
  18.     Person(String name,int age)  
  19.     {  
  20.         this(name);  
  21.         this.age=age;  
  22.     }  
  23.     public void display()  
  24.     {  
  25.         System.out.println("name:"+this.name+"\nage:"+this.age);  
  26.     }  
  27. }  
  28. class PersonDemo  
  29. {  
  30.     public static void main(String[] args)  
  31.     {  
  32.         Person p=new Person("李四",30);  
  33.         p.display();  
  34.     }  
  35. }  

0 0
原创粉丝点击