No1_7.类和对象_Java学习笔记
一、面向对象的特点:
a.封装:封装是面向对象的核心思想,将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想;
保证了类内部数据的完整性,应用该类的用户不能轻易直接操纵此数据结构,只能执行类允许公开的数据。
b.继承:类与类之间有关系,叫做关联;继承是关联中的一种;
继承性主要利用特定对象之间的共有属性。
c.多态:将父类对象应用于子类的特征就是多态;“一个接口,多种实现”,就是同一种事物表现出的多种形态。
多态的实现并不依赖具体类,而是依赖于抽象类和接口;
在多态的机制中,比抽象类更为方便的方式是将抽象类定义为接口。
多态存在的三个必要条件
1、要有继承;
2、要有重写;
3、父类引用指向子类对象。
二、接口:由抽象方法组成的集合就是接口;大家共同遵守的一个标准;
1 import java.util.Scanner; 2 3 public class HelloClassObject { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 System.out.println("学习类和对象!类~~~~~~"); 8 /***************************** 9 * 一、类: 10 * 1.是封装对象的属性和行为的载体。 11 * 2.对象的属性以成员变量的形式存在,对象的行为以成员方法的形式存在。 12 * 13 * 二、构造方法: 14 * 在类中除了成员方法外,还存在一种特殊类型的方法,构造方法。 15 * 1.与类同名; 16 * 2.对象的创建就是通过构造方法完成的,实例化一个对象时,自动调用构造方法; 17 * 3.构造方法没有返回值; 18 * 4.构造方法不需要void修饰;普通方法没有返回值用void修饰; 19 * 5.格式:public book(){} 20 * 6.在构造方法中可以为成员变量赋值,实例化一个本类的对象时,相应的成员变量也被初始化; 21 * 7.只有在类中没有定义任何构造方法时,编译器才会在该类中自动创建一个不带参数的构造方法。 22 */ 23 24 /***************************** 25 * 三、类的主方法: 26 * 1.主方法是类的入口点,定义了程序从何处开始; 27 * 2.格式: 28 * public static void 29 * main(String[] args){} 30 * 3.特点: 31 * a.主方法是静态的。要直接在主方法中调用其它方法,则该方法必须也是静态的; 32 * b.主方法没有返回值; 33 * c.主方法的形参为数组; 34 ***************** */ 35 for (int i = 0; i < args.length; i++) { 36 System.out.println(args[i]); 37 // Run -->Run Configurations --> Arguments 可设置参数 38 } 39 40 /**************** 41 * 四、成员变量: 1.对象的属性称为成员变量; 42 * 43 * 五、成员方法: 44 * 1.类对象的行为。 45 * 2.权限修饰符 返回值类型 方法名(参数类型 参数名){方法体; 返回值;} 46 * 3.一个成员方法可以有参数,参数可以是对象或变量; 47 * 4.成员方法可以返回值和不返回任何值void; 48 * 5.返回值与方法返回值的类型一致,return结束; 49 * 50 * 六、局部变量: 51 * 1.成员方法内定义的变量,是局部变量; 52 * 2.方法中的形参,也属于局部变量; 53 * 3.方法被执行时创建,执行结束时被销毁; 54 * 4.局部变量在使用时,必须赋值,否则编译出错; 55 * 56 * 七、局部变量的有效范围: 57 * 1.局部变量的有效范围从该变量的声明开始到该变量的结束为止; 58 * 2.相互不嵌套的作用域可以同时声明两个名称、类型相同的局部变量; 59 * 60 * 61 * 八、静态变量、常量和方法 62 * 1.用static修饰的(变量、常量和方法)叫做静态成员; 63 * 2.静态成员属于类所有的,可以在本类或其他类使用“类名.静态类成员”调用 ; 64 * 3.静态数据和静态方法通常是为了共享数据或方法; 65 * 4.静态成员仍遵循public\private\protected修饰符约束; 66 * 5.静态方法中不可以使用this关键字; 67 * 6.静态方法中不可以直接调用非静态方法; 68 * 7.不能将方法体内的局部变量声明为static; 69 * 8.如果在执行类时,希望先执行类的初始化动作,可以使用static定义一个静态区域,优先执行,只执行一次; 70 * 例:public class 71 * example{ static { //some } } 72 */ 73 74 Book bk=new Book(); 75 // 调用类成员变量 76 System.out.println("调用Book类的静态变量" + Book.PI); 77 // 调用类方法 78 bk.girl(); 79 //实例化对象 80 String bookName=bk.getName(); 81 System.out.println("输出幸运数字和书名:"+bookName); 82 83 84 /******************** 85 * 九、权限修饰符 86 *1.包括private、public、protected 87 *2.控制类、成员变量和成员方法; 88 *3.private,只能在本类中使用,子类中不可见,其它包的类不可见; 89 *4.public,可以本类中使用,子类中使用,其它包的类中使用; 90 *5.protected,只有本包内该类的子类或其它类可访问; 91 *6.子类和父类不在同一包中,只有public的类可以被子类进行访问; 92 *7.父类不允许通过继承产生的子类访问其成员变量,用private; 93 *8.声明类不使用权限修改符,则默认包存取范围; 94 *9.类的权限设定会约束类成员的权限设定; 95 * 96 *十、this关键字 97 *1.this可以调用成员变量和成员方法; 98 *2.this引用就是对一个对象的引用; 99 *3.this 可以作为方法的返回值,返回一个类; 100 * 101 *十一、一个.java文件中可以有很多类。 102 *1.public 权限的类只能有一个(也可以一个都没有,但最多只有1个) 103 *2.这个.java文件的文件名必须是public类的类名(一般的情况下,这里放置main方法是程序的入口。) 104 *3.若这个文件中没有public的类,则文件名随便是一个类的名字即可 105 *4.你用Javac 编译这个.java文件的时候,它会给每一个类生成一个.class文件 106 */ 107 108 //范例一、自定义学生类,实例化及调用 109 110 Students st=new Students("sunshine",false,28); //创建对象 111 System.out.println("姓名:"+st.getName()); 112 System.out.println("性别:"+st.getSex()); 113 System.out.println("年龄:"+st.getAge()); 114 115 //范例二、温度单位转换工具 116 System.out.println("请输入要转换的温度(单位:摄氏度)"); 117 Scanner in=new Scanner(System.in); 118 double celsius=in.nextDouble(); 119 CelsiusConvert cc=new CelsiusConvert(); 120 double fahrenheit=cc.getFahrenheit(celsius); 121 System.out.println("转换成成的温度是(单位:华氏度)"+fahrenheit); 122 in.close(); 123 124 }//main方法结束 125 126 // 定义构造方法 127 public HelloClassObject() { 128 this("this 调用有参构造方法!"); 129 System.out.println("无参构造方法"); 130 } 131 132 public HelloClassObject(String name) { 133 System.out.println("有参构造方法"); 134 } 135 136 }//HelloClassObject 类结束 137 138 139 /************* 140 * @author sunshine 141 *自定义Book类 142 */ 143 class Book { 144 // 定义成员变量 145 private int id; 146 private String name; 147 private String category; 148 149 // 定义成员方法 150 public String getName() { 151 int id=7; //局部变量 152 setName("Java"); // 调用类中其它方法 153 return id + this.name; // 设置方法返回值 154 } 155 156 public void setName(String name) { 157 this.name = name; // 将参数值赋予类中的成员变量 158 } 159 160 public Book getBook() { 161 return this; 162 } 163 164 // 静态变量,可以在本类或其它类中调用 165 static double PI = 3.14159; 166 167 // 静态方法,可以在本类或其它类中调用 168 public static void girl() { 169 System.out.println("静态方法girl,你调用了Book中的girl方法了~~~"); 170 171 } 172 }//Book类结束 173 174 175 /************* 176 * @author sunshine 177 *范例一、自定义学生类 178 */ 179 //同一个java文件中可以有多个类 180 class Students{ 181 private String name; 182 private boolean sex; //true,男,false,女 183 private int age; 184 185 public Students(String name,boolean sex,int age){ //构造函数,实例化对象时,自动执行; 186 this.name=name; 187 this.sex=sex; 188 this.age=age; 189 190 } 191 public String getName(){ 192 return name; 193 } 194 public boolean getSex(){ 195 return sex; 196 } 197 public int getAge(){ 198 return age; 199 } 200 }//Students类结束 201 202 //范例二、温度单位转换工具 203 class CelsiusConvert{ //public 不能用这个修饰,一个java文件中public的类只能有一个 204 205 public double getFahrenheit(double celsius){ 206 double fahrenheit=1.8*celsius+32; 207 return fahrenheit; 208 } 209 210 } 211 //CelsiusConvert类结束
输出结果:
1 学习类和对象!类~~~~~~ 2 Everyday 3 sunshine 4 happy 5 调用Book类的静态变量3.14159 6 静态方法girl,你调用了Book中的girl方法了~~~ 7 输出幸运数字和书名:7Java 8 姓名:sunshine 9 性别:false 10 年龄:28 11 请输入要转换的温度(单位:摄氏度) 12 35 13 转换成成的温度是(单位:华氏度)95.0