《Java面向对象三个重要特征》由会员分享,可在线阅读,更多相关《Java面向对象三个重要特征(17页珍藏版)》请在金锄头文库上搜索。
1、Java 面向对象面向对象三个重要特征: 封装 继承 多态对象 - 是现实生活中的存在的事物,( 万事万物皆对象) 对象是类的实例, 具有明确定义的属性和行为类 - 是对象抽象出的类别模板,对象的设计图纸用来指明对象的特征和行为 是具有相同特征和共同行为的一组对象的集合类的声明格式:访问修饰符 class 类名 类的主体成员定义 用来定义行为和特征 类的两种基本成员: 属性(成员变量 ) 方法(成员函数)属性是用来刻画对象的特征方法是用来体现对象的功能类声明 :Java 声明类名的标准规范,即每个单词的第一个字母需要大写类的方法修饰符 public final abstract /汽车类pub
2、lic class Car /属性 (成员变量 )/访问修饰符 数据类型 字段String name; double price;String color; /方法(成员函数 )/访问修饰符 返回值类型 方法名 (形参列表) public void run()System.out.printf(汽车:%s_ 价格:%.2f ¥_ 颜色:%s%n ,name,price,color);System.out.println(这是我行驶的功能哦 !);/*对象的创建:new 1-实例化对象2-分配内存Car 宝马 - 声明一个名为宝马的Car类的引用变量new Car() - 实例化对象,分配内存
3、调用构造函数Car 宝马=new Car();- 表示 名为宝马的引用变量指向堆内存中的实例对象 */public static void main(String args)/实例化一个具体的 Car实例对象Car 宝马=new Car();/访问属性宝马.name=宝马500;宝马.price =5000000.00D;宝马.color =blue;/访问方法宝马.run();Car 奔驰; /声明一个空引用对象 即null奔驰=new Car(); 奔驰.name=奔驰560;奔驰.price =8000000.00D;奔驰.color =black; 奔驰.run();/*对象的销毁 J
4、ava的垃圾回收器负责销毁对象显式销毁 对象名=null(一般不需要显式销毁对象)*/奔驰=null; /设置奔驰为空引用System.out.println(奔驰. name);/由于奔驰已经没有指向实例,将抛空引用异常属性和方法public class Book /java中属性一般声明为 private /外界要访问通过公有的 getter和setter方法private String bookName; /注意 属性名首字母小写private int bookId=0;private String author=无名; /可以直接初始化private float price=0.0F;
5、/getter方法public String getBookName() return bookName;/setter方法public void setBookName(String bookName) this.bookName = bookName;public int getBookId() return bookId;public void setBookId(int bookId) this.bookId = bookId;public String getAuthor() return author;public void setAuthor(String author) thi
6、s.author = author;public float getPrice() return price;public void setPrice(float price) if(price0.0)return;this.price = price;/访问修饰符 返回值类型 方法名 (形参列表) public String show()return String.format(书名_%s 编号_%4d 作者_%s 价格:%.2f, bookName,bookId,author,price);参数传递参数传递有两种方式:传值 传引用 传值 传递实参的副本,对实参无影响 基本数据类型及封装类、
7、String属于传值传引用 传递实参本身,形参的改变影响实参 数组、对象属于传引用仅讨论一下值传递和引用:所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。public static void transferParam(int x)x+;public static void transferParam(Book book)book.setAuthor(张三丰);public s
8、tatic void main(String args) int x=10;System.out.printf(x的值 x=%d%n,x);transferParam(x);System.out.printf(x的值没有改变 x=%d%n,x);Book book=new Book();System.out.printf(book对象.author:%s%n,book.getAuthor();transferParam(book);System.out.printf(book对象.author:%s%n,book.getAuthor();方法重载 方法同名不同参方法重载是多态性的一种表现形式1
9、-本类中多个方法同名2-参数个数,参数类型,参数顺序不同3-构造方法可重载注意:方法重载与返回类型无关 即返回类型不同不是重载public class TestOverloading public void doSomething()System.out.println(无参的doSomething方法);/形参个数不同public void doSomething(int x)System.out.println(doSomething方法接收一个int形参);/形参类型不同public void doSomething(String str)System.out.println(doSom
10、ething方法接收一个String 形参);/形参顺序不同public void doSomething(String str,int x)System.out.println(doSomething(String str,int x);public void doSomething(int x,String str) System.out.println(doSomething(int x,String str);public static void main(String args) TestOverloading obj=new TestOverloading();obj.doSome
11、thing();obj.doSomething(1000);obj.doSomething(doSomething);obj.doSomething(1000, doSomething);obj.doSomething(doSomething, 1000);构造函数 实例化对象时自动调用的函数主要作用:初始化成员变量说明: 1-与类同名 2-无返回值3-实例化时自动调用 4-可以重载声明类时 如果没有指定构造方法 默认有一个无参的构造方法一旦指定构造函数 默认的构造函数将不再存在public class Employee private String empName;private int e
12、mpId;private short age;private float salary; / 薪水private Employee() System.out.println(执行无参构造函数 );public Employee(int empId) this(); /显示调用无参构造函数System.out.println(执行有参的构造函数 );this.empId = empId;/*this关键字 表示本类的当前对象 主要用在以下两个地方 1-方法里局部变量与成员变量同名时 2-在构造方法中调用类自身另外的构造方法(位于第一行)*/public Employee(String empNa
13、me, int empId, short age, float salary) this(empId);this.empName = empName;this.age = age;this.salary = salary;Overridepublic String toString() return Employee age= + age + , empId= + empId + , empName=+ empName + , salary= + salary + ;public static void main(String args) Employee one=new Employee()
14、;System.out.printf(one.empId:%d%n,one.getEmpId();Employee two=new Employee(100);System.out.printf(two.empId:%d%n,two.getEmpId();Employee three=new Employee(东方不败,101,new Short(28),5000.00F);System.out.println(three); /自动调用toString()作业:1 编写一个类,该类的对象可以输出大写的所有英文字符2 编写一个类 ,该类的对象可以实现查询int类型的值在int 数组中的索引值的功能