今天学习了Java的另一个特征——继承,在分享新知识的同时,我们先复习前面所学习的知识。
面向对象编程语言的基本特征是什么?
1,封装性:
封装性是指将对象相关的信息和行为状态捆绑成一个单元,即将对象封装为一个具体的类。封装隐藏了对象的具体实现,当要操纵对象时,只需调用其中的方法,而不用管方法的具体实现。
2,继承性:
一个类继承另一个类,继承者可以获得被继承类的所有方法和属性,并且可以根据实际的需要添加新的方法或者对被继承类中的方法
进行覆写,被继承者称为父类或者超类,继承者称为子类或导出类,继承提了程序代码的可重用性,java中一个子类只能继承一个父类,object类是所有类的最终父类。
3,多态性:
多态性是指不同的对象对同一事物而做出的相同行为,一个类a可以指向其自身类和其导出类,一个接口可以指向其接口实现类,在方法参数中,使用多态可以提高参数的灵活性。
同时还有一个抽象,这个我们不需要多作解释。
设计一个包含多个构造器的类,并分别用这些构造函数实例化对象
构造器方法不能有返回值类型的声明,即使void都不可以
public void A(){}不是构造器,是合法的普通方法,可以直接调用 new A().A()
```public class A{
public A(){} //new A();//允许构造器方法重载---方法名称相同,参数不同
public A(int k){} //new A(123)
public A(String k){} //new A("yan")
public A(int k1,String k2){} //new A(123,"yan")
public A(String k1,int k2){} //new A("yan",123) }
Java语言中,成员变量与局部变量有什么区别
成员变量:
①成员变量定义在类中,在整个类中都可以被访问。
②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
③成员变量有默认初始化值。
局部变量:
①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
③局部变量没有默认初始化值
面向过程程序设计的核心
程序核心是算法 解释算法 面向过程:自顶向下、逐步求精、模块化
面向对象技术中的对象三个基本属性
状态 行为 标识
使用一个对象前,必须声明并初始它 , 使用临时变量要求先定义后使用,先赋值后使用, 定义引用类型的变量默认值为null
编写一个Cal1类实现加减两种运算,然后编写另一个Cal2类实现 乘除两种运算
public class Cal1{
private int n1,n2; //省略了get/set方法
public long add(){//不会出现空指针问题,因为n1和n2是简单类型,默认值为0
return 0L+n1+n2; }
public long sub(){
return 0L+n1-n2;
}
}
//Cal1 c1=new Cal1(); c1.setN1(100); c1.setN2(200); long res=c1.add();
public class Cal2 extends Cal1{
public double mul(){ return 1.*getN1()*getN2();
}public double div(){ if(getN2()!=0)
return 1.*getN1()/getN2();//如果没有1.这个操作,则是整除计算
else return Double.POSITIVE_INFINITY; //正负无穷大之分
}
}
建立3个类:居民、成人、官员。居民包含身份证号、姓名、出生 日期,而成人继承自居民,多包含学历、职业两项数据,官员则 继承自成人,多包含党派、职务两项数据。要求每个类的字段都 以属性的方式对外提供数据输入输出的功能
public class Resident{
private String idCard;//18位并且可能有字符,数值型数据的比较效率高于字符串
private String name;
private Date birth; //java.util.Date是系统提供的日期类型
//get/set方法....
public void setIdCard(String idCard) { //针对传入的身份证号码进行合法性验证,如果数据不合法应该通过异常告知调用处或者赋默认值
if(idCard!=null && idCard.trim().length()==18)
this.idCard = idCard;
else
throw new RuntimeException("身份证号码不合法!");
}
}