JAVA学习15---封装、继承和多态

封装

  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
  • 低耦合:仅暴露少量的方法给外部使用
  • 信息隐藏:通过操作接口访问对象中数据的实际表示而不是直接访问

以下为在主函数demo中调用student类,通过公有方法访问私有属性的例子:

public  class  demo{
    public static void main(String[] args) {
        student zhangsan = new student();
        zhangsan.setName("张三");
        System.out.println(zhangsan.getName());
    }
}
public class student {
    //私有属性
    private String name;
    private int age;
    //通过set方法初始化值
    public void setName(String name){
        this.name =name;
    }
    //通过get方法获取该值
    public String getName(){
        return this.name;
    }
}

继承

  • 继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等。
  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键词extends来表示
  • 子类和父类之间,从意义上讲应该具有“is a”的关系
  • 继承的本质是对某一批类的抽象
  • Java中只有单继承,没有多继承,但可以间接继承多个父类

super方法:

  • super调用父类的构造方法,必须在构造方法的第一个
  • super和this不能同时调用构造方法

以下为student类继承person类的例子:

demo主函数

public  class  demo{
    public static void main(String[] args) {
        student zhangsan = new student();
        zhangsan.f();
        zhangsan.relation();
    }
}

student类

public class student extends person{
    public student(){
        System.out.println("调用student无参构造");
    }
    private String name = "张三儿";
    public void relation(){
        System.out.println("学生叫"+this.name);
        System.out.println("爸爸叫"+super.name);
    }
    public void say(){
        System.out.println("student是子类");
    }
    public void f(){
        this.say();
        super.say();
    }
}

person类

public class person {
    public person(){
        System.out.println("调用person无参构造");
    }
    protected  String name ="张三";
    public void say(){
        System.out.println("person是父类");
    }
}

方法重写:

  • 方法名必须相同
  • 参数列表范围必须相同
  • 修饰符范围可以扩大,但不能缩小(public>protected>default>private)
  • 抛出异常的范围可以缩小,但不能扩大

以下为A类重写B类方法的例子:

public  class  demo{
    public static void main(String[] args) {
        A a = new A();
        B b = new A();
        a.f();
        b.f();
    }
}
public class A extends B{
    @Override
    public void f(){
        System.out.println("A的方法");
    }
}
public class B {
    public  void f(){
        System.out.println("B的方法");
    }
}
  • b是A new()出来的对象,因此调用了A的方法
  • 同名方法有static时,b调用了B类的方法,因为b是用B类定义的,b.f()输出为B类的f方法
  • 同名方法没有有static时,b调用的是对象的方法,即A new()对象b的方法,b.f()输出A类重写的f方法
  • 静态方法是类的方法,非静态方法是对象的方法

多态

  • 同一种方法可以根据发送对象的不同而采用多种不同的行为方式
  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
  • 存在条件:有继承关系、子类重写父类方法、父类引用指向子类对象
  • 方法有多态性,属性没有多态性

对象能执行哪些方法,主要看对象左边的类有哪些方法,如果左边类重写了其父类的方法,则执行子类的方法:

public  class  demo{
    public static void main(String[] args) {
        //student类能调用的方法都是自己的或者继承父类的
        student a =new student();
        //person父类,可以指向子类,但是不能调用子类独有的方法
        person b =new student();
        Object c =new student();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值