面向对象编程

目录

一,继承

二,多态

1,向上转型

2,方法重写

3,理解多态


一,继承

代码中创建类,主要是抽象的实现现实中一些事物所包含的一些属性和方法,但是有时候客观事物之间也会存在一些关联关系,那么在表示类和对象之间也会存在一些关联联系。

基本语法

class 子类 extends 父类{

}

使用extens关键字来,完成子类对父类的一个继承关系

在java中一个子类只能继承一个父类,这也是java和c++的一个特殊的地方

子类会继承法所有public的方法和字段。对于父类的private子类也是无法去访问的。

子类的实例化也包含着父类的实例化,可以用super关键字来得到父类的实例的引用。

这里写一个简单的继承关系

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("多多");
        dog.eat("火腿肠");
    }
}
class  Animal{
    public String name;

    public Animal(String name){
        this.name=name;
    }
  public void eat(String food){
      System.out.println(name+"正在吃"+food);
  }

}
  class Dog extends Animal{

    public Dog(String name) {
        //使用super来继承父类的构造方法
        super(name);
    }
}

这里的Dog类可以继承Animal中的方法和属性,减少了代码的冗余。

我们还可以进行一些更加复杂的继承关系,例如我们常用的手机他可以分为安卓和ios,而安卓各自下有更多的品牌,这些品牌要继承安卓,品牌下也有许多的型号,型号又去继承他们的品牌。

二,多态

多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。多态成立的另一个条件是在创建子类时候必须使用父类new子类的方式。

多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作

多态的好处:降低使用者的门槛,让调用者不需要知道类的内部细节,方便扩展。

1,向上转型

父类的引用指向子类的引用这种就叫做引用。

向上转型的意思是编程的一种语言。向上转型并非是将B自动向上转型为A的对象,相反它是从另一种角度去理解向上两字的:它是对A的对象的方法的扩充,即A的对象可访问B从A中继承来的和B复写A的方法。其它的方法都不能访问。

子类 引用 = new 子类
父类 引用= 子类引用
或者可以写成
父类 引用 = new 子类

在java中,调用某个类的方法,究竟执行了那个代码块(是父类的还是子类)取决于这个引用是指向父类还是子类的。

2,方法重写

发生在继承关系中间,子类定义了和父类完全一样方法这种情况就叫做重写。

关于重写的注意事项

1,重写和重载不一样不能混淆

2,普通方法可以重写但是加static的静态方法不可以重写。

3,重写中子类的方法的权限不能低于父的方法访问权限。

4,重写的方法返回值不一定和父类一样。

事实上,方法重写和动态绑定在本质上的描述是一样的,只是侧重点不同罢了。

3,理解多态

有了上面的向上转型和方法重写我们就可以使用多态来设计代码陈程序了。我们可以写一些关于父类的方法的代码,就可以兼容各种子类的情况。

public class Shape {
    public  void drew(){
        //什么都不用写
    }
}
class Cycle extends Shape{
    @Override
    public void drew() {
        System.out.println("这是以一个圆");
    }
}
class Rect extends Shape{
    @Override
    public void drew() {
        System.out.println("这是一个正方形");
          }
}
//这是一个测试类
public class test {
    public static void main(String[] args) {
        Shape shape=new Cycle();
shape.drew();
Shape shape1=new Rect();
shape1.drew();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值