封装,继承,多态

面相对象的三大特性:
1、封装:该隐藏的隐藏,该公开的公开。一般来说对象的属性应该隐藏,方法应该公开 的,还应有访问属性的方法。好处在于可以对属性的访问进行很好的控制。”private”私有的、别人不可用的, 对应的是公共的“public”。如果方法也要隐藏,就只能隐藏方法的实现,不能隐藏方法的声明,方法实现隐藏的好处在于:不会很大程度上影响到方法的架构。Eg:
//测试封装
public class TestEncapsulation{
public static void main(String[] args){
CreditCard card=new CreditCard();//创建一个新的对象,并赋予给引用中
System.out.println(card.getPassword());//调用引用的一个方法并打印出来
card.setPassword("654321");//调用引用的一个方法
}
}
class CreditCard{
private String password="123456";//定义一个私有??封装)的属性
public String getPasswor(){//调用封装(私有)的属性的方法
return password;
}
public void setPassword(String password){//修改封装(私有)的变量
if (password.,ength()!=6) return;
this.password=password;
}
}
2、继承:子类继承父类,共性(一般性)放在父类,个性(特殊性)放在子类,从一般(父类)到特殊(子类)的关系。java中子类和父类之间一般是单继承的,即一个子类只能有一个直接的父类。但是一个父类可以有多个子类。体现了java的简单性和扩展性的特征。在此用到一个关键字“extends”继承,用来连接子类和父类的语言。父类的属性(私有的出外)和方法(私有的出外)会自动的继承到子类中,构造方法是不能继承的,只能访问,用关键“super”访问。
方法覆盖(override): 就是在子类中再写一个与父类相同的方法声明(要求:方法名、返回值、参数表必须相同、子类方法权限<标识符>相同或者宽余父类的方法权限),但是它们的方法实现不同,用子类的特殊方法实现继承父类给他的一般方法实现。

3、多态:指在一棵继承树中的类中可以有多个同名但不同方法体以及不同形参的方法。
多态有两种情况:覆盖和重载。
编译时多态:即是方法覆盖。
运行时多态:子类对象可以当作父类对象来看代(例:猫可以看作是动物;宝马可以看作是车,等等),“Animal a = new dog();”意思是创建一个新的dog对象,并赋予给Animal中的引用,其中的“Animal a”是引用类型(父类中的),“new dog()”是对象类型(子类的),类Animal必是类dog的父类。引用代表主观的概念(可以改变的概念),对象代表客观的概念(不可随人的主观思想改变而改变的)。
多态的三条原则:
1)对象类型不变 : 即客观事物不能改变(对象类型),主观的概念能够改变(引用类型);
2)只能对引用调用其引用类型中定义的方法;
3)在运行时,根据对象类型找子类覆盖之后的方法。Eg:
public class TestPolymorphism{
public static void main(String[] args){
Animal a=new Dog();//创建一个新的对象类型,并赋予到引用类型中
a.eat();
a.sleep();//打印出来的结果是"sleep 6 hours",因为子类覆盖了父类的相同方法
//下面的方法在父类没有,不能实现,如要实现则需要强制转换,例如下面的强制转换
//a.call(); error!
if (a instanceof Dog){//进行强制转换时须进行判断操作
Dog d=(Dog)a;//如果在,把引用类型中的对象强行转换到子类的对象中
d.call();//然后再进行子类特有的方法
}
/*System.out.println(a instanceof Dog); true
System.out.println(a instanceof Cat); false
System.out.println(a instanceof Animal); true*/
}
}
class Animal{
public void eat(){
System.out.println("Animal eat");
}
public void sleep(){
System.out.println("sleep 8 hours");
}
}
class Dog extends Animal{
public void sleep(){
System.out.println("sleep 6 hours");
}
public void call(){
System.out.println("dog call ");
}
}
当父类引用要强制转换到子类中时,需要先进行判断子类是否是在引用类型中,用到关键字“instanceof(是不是)”进行判断,eg:
if (a instanceof Dog){//判断子类是否在引用类型中
Dog d=(Dog)a;//如果在就进行下面的操作,把引用类型中的对象强行转换到子类的对象中
d.call();//调用子类的方法
}
“引用+instanceof(是不是)+类名”其返回值是boolean类型的即结果是true或者false,eg:a instanceof dog 表示a引用的对象里面是不是dog。
多态会使我们的程序更加简单化
多态一般用在方法的返回值中和方法的参数上面,eg:
public Animal eat(){
return new dog();
}
public void eat(Animal a){
return new dog();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值