标签:getname 就会 wal 重写 构造方法 区分 逆序 isp 释放内存
从第一章到第二章整整隔了一个月的时间,这速度也是慢的无语了。因为这个月负责开发公司一个SaaS类型APP,忙的昏天暗地终于上线了,这才有时间写个博客。本章还是以概念为主,有点枯燥重在理解。
名词解释
面向对象基本特性
面向对象三个特性
default:成员变量和方法只能被同一个包里的类访问,具有包可见性
protected:可以被同一个包中的类访问,被同一个项目中不同包中的子类访问
public:可以被同一个项目中所有类访问,具有项目可见性,这是最大的访问权限
关键字:extends ,Java是单继承关系所有对象的父类都是Object,多继承容易使代码混乱,单继承使只有一个父类代码逻辑更清晰如:它们都是相同的数据类型都有相同的方法功能且单继承结构对垃圾回收机制实现变得容易的多。Java是单继承多实现接口的结构。
重载(overloading):同一个类中有相同的方法名字不同的参数叫做方法重载
重写(overriding):两个类之间必须存在继承关系,且子类重写了父类中有的方法,包括方法名字参数返回值都相同,如果需要调用父类中方法须用super关键字调用
条件:必须存在继承关系,子类重写父类的方法,向下转型
1 package com.fengzb.java002.object; 2 3 /** 4 * @Description 封装 5 * @Author jxb 6 * @Date 2017-06-10 22:52:20 7 */ 8 public class Person { 9 10 /** 11 * 手 12 */ 13 private String hand; 14 15 /** 16 * 脚 17 */ 18 private String foot; 19 20 /** 21 * 头 22 */ 23 private String head; 24 25 public String getHand() { 26 return hand; 27 } 28 29 public void setHand(String hand) { 30 this.hand = hand; 31 } 32 33 public String getFoot() { 34 return foot; 35 } 36 37 public void setFoot(String foot) { 38 this.foot = foot; 39 } 40 41 public String getHead() { 42 return head; 43 } 44 45 public void setHead(String head) { 46 this.head = head; 47 } 48 49 /** 50 * 无参构造方法 51 */ 52 public Person(){ 53 System.out.println("--jxb--Person--Person:我是Person无参构造方法"); 54 } 55 56 /** 57 * @Description private方法可以在同一个类中调用 58 * @Param 59 * @Author jxb 60 * @Date 2017-06-11 23:19:48 61 */ 62 private void isPerson() { 63 System.out.println("--jxb--Person--isPerson:" + "我是人"); 64 } 65 66 /** 67 * @Description 默认方法只有同一个包里可用 68 * @Param 69 * @Author jxb 70 * @Date 2017-06-12 12:32:00 71 */ 72 void useHeadThinking() { 73 System.out.println("--jxb--Person--useHeadThinking:" + "人用头想事情"); 74 } 75 76 /** 77 * @Description protected方法同一个包可见,同一个项目不同包的子类可见 78 * @Param 79 * @Author jxb 80 * @Date 2017-06-12 12:36:06 81 */ 82 protected void useFootWalk() { 83 System.out.println("--jxb--Person--useFootWalk:" + "人用脚走路!"); 84 } 85 86 /** 87 * @Description public方法可以同项目中所有类访问 88 * @Param 89 * @Author jxb 90 * @Date 2017-06-11 23:17:15 91 */ 92 public void useHandEat() { 93 System.out.println("--jxb--Person--useHandEat:" + "人用手吃饭!"); 94 } 95 96 /** 97 * @Description private方法可以在同一个类中调用 98 * @Param 99 * @Author jxb 100 * @Date 2017-06-11 23:19:48 101 */ 102 public void personDetail() { 103 System.out.println("--jxb--Person--personDetail:" + "我是人类"); 104 } 105 106 }
1 package com.fengzb.java002.object; 2 3 /** 4 * @Description 继承 5 * @Author jxb 6 * @Date 2017-06-12 12:25:53 7 */ 8 public class Mother extends Person { 9 /** 10 * 姓名 11 */ 12 private String name; 13 14 /** 15 * 年龄 16 */ 17 private int age; 18 19 /** 20 * 性别 21 */ 22 private String sex; 23 24 public String getName() { 25 return name; 26 } 27 28 public void setName(String name) { 29 this.name = name; 30 } 31 32 public int getAge() { 33 return age; 34 } 35 36 public void setAge(int age) { 37 this.age = age; 38 } 39 40 public String getSex() { 41 return sex; 42 } 43 44 public void setSex(String sex) { 45 this.sex = sex; 46 } 47 48 /** 49 * @Description 50 * @Param 51 * @Author jxb 52 * @Date 2017-06-11 23:17:15 53 */ 54 public void useHandEat() { 55 System.out.println("--jxb--Person--useHandEat:" + "wbb用手吃饭!"); 56 } 57 58 /** 59 * @Description 60 * @Param 61 * @Author jxb 62 * @Date 2017-06-11 23:17:15 63 */ 64 public void motherDetail() { 65 System.out.println("--jxb--Father--motherDetail:" + this.name + "-" + this.getAge() + "-" + this.getAge()); 66 } 67 68 }
对象的生命周期
异常处理
并发编程
对象存储位置
作用域
类
聚合(has-a)(aggregation)
继承(is-a)(inheritance)
设计类时尽量做到高内聚低耦合
所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
属性
方法-参数-返回值
构造器:与类名相同,每个类可以有一个以上的构造器,没有返回值,伴随new关键字被调用。一个类中如果没有构造器,系统就会默认一个无参的构造器,数值型为0,布尔型为false,对象为null
static
final
初始化数据
1 package com.fengzb.java002.object; 2 3 /** 4 * @Description 测试类 5 * @Author jxb 6 * @Date 2017-06-11 23:07:24 7 */ 8 public class ObjectTest { 9 10 public static void main(String[] args) { 11 System.out.println("--jxb--ObjectTest--main:----------测试继承----------begin"); 12 /** 13 * private 方法无法调用 14 */ 15 Person person = new Person(); 16 person.useHandEat(); 17 18 /** 19 * 向上转型 拥有父类的可见方法,当子类重写父类方法时,调用的是子类的方法-多态 20 */ 21 Person pMother=new Mother(); 22 pMother.useHandEat(); 23 24 /** 25 * 编译和运行均不会报错 26 * 向下转型需要强制类型转换 27 */ 28 Mother ppMother = (Mother)pMother; 29 ppMother.setName("枫"); 30 ppMother.motherDetail(); 31 32 /** 33 * 编译不会报错但运行会报java.lang.ClassCastException(类型转换异常) 34 * 可以用instanceof 来判断是否可以向下转型 35 */ 36 Person mperson = new Person(); 37 //这里转换后运行会出现异常 38 //Mother mother = (Mother) mperson; 39 //mother.useHandEat(); 40 if(mperson instanceof Mother){ 41 Mother mother = (Mother) mperson; 42 mother.useHandEat(); 43 System.out.println("--jxb--ObjectTest--main:很显然走不到这里"); 44 } 45 System.out.println("--jxb--ObjectTest--main:----------测试继承----------end"); 46 47 System.out.println("--jxb--ObjectTest--main:----------测试final static----------begin"); 48 49 /** 50 * address输出的是:北京昌平,所以具体加载顺序如下: 51 * 1:声明式赋值被加载 52 * 2:静态模块被加载且只加载一遍(这个实际还是很有用的) 53 * 3:父类构造方法被加载 54 * 4:本身构造方法被加载 55 */ 56 Father father = new Father(); 57 Father father1 = new Father(); 58 System.out.println("--jxb--ObjectTest--main:"+Father.address); 59 /** 60 * final无法赋值 61 */ 62 //Father.TEL="18588888888"; 63 System.out.println("--jxb--ObjectTest--main:"+Father.TEL); 64 System.out.println("--jxb--ObjectTest--main:----------测试final static----------end"); 65 66 } 67 }
包(package):将类组织起来,一般用域名的逆序作为包名。如果一个类里面引用相同名字的外部类,可以通过inport关键字导入包路径来区分
注释:单行(//)以及多行注释(/* */),注释内容Java虚拟机会自动过滤
注释文档:JavaDoc可以生成html文档,以@符号为标识符如:@version
标签:getname 就会 wal 重写 构造方法 区分 逆序 isp 释放内存
原文地址:http://www.cnblogs.com/fengzb/p/java02.html