Java面向对象-5

目录

什么是面向对象

方法的定义

类和对象的创建

封装

继承

多态

Static

四大修饰符

抽象类

接口


什么是面向对象

方法的定义

类和对象的创建

封装

public class Student {
    //属性
    //私有属性
    private String name;
    private int id;
    private int age;
    //使用get/set方法可以对属性设置值
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }
    //可以安全规避
    public void setAge(int age) {
        if (age>150||age<0){
            System.out.println("错误");
        }else{
            this.age = age;
        }
    }
}

好处

1、隐藏代码细节,提高安全性,保护数据

2、统一接口规范,可维护性高

3、可以进行安全规避

继承

方法重写 :

        //A是子类,B是父类
        A a = new A();//重写前,A的方法
        a.test();
        B b = new A();//重写前,B的方法,重写后A的方法
        b.test();

继承语法:

public class Student extends Person{
//私有的无法被继承
}

1、super调用父类的构造方法,必须在构造方法的第一个
2、super必须只能出现在子类的方法或者构造方法中
3、super和this不能同时调用构造方法
Vs this
    代表的对象不同:
        this:本身调用者这个对象
        super:父类对象
     前提:
        this:没继承也可以使用
        super:只能在继承条件下才可以使用
     构造方法:
        this();本类的构造
        super();父类的构造
     若是父类定义了有参构造器,并且无参构造器没有显式定义,则无法调用父类的无参构造器
    只能调用父类的有参,也无法定义子类的无参,所以定义有参构造器之后要把无参写上,
 */

多态

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。

package demo02;
import demo02.A;
public class Application {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        new Student();
        new Person();
        //可以指向的引用类型就不确定了:父类的引用指向子类
        Student s1 = new Student();
        //父类型,可以指向子类,但是不能调用子类独有的方法
        Person s2 = new Student();
        Object s3 = new Student();
        //对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
        ((Student)s2).eat();
        s1.eat();
    }
}


注意事项:
1、多态是方法的多态,属性没有多态 
2、有父子类关系的才可以进行转换
3、多态存在的条件,有继承关系,方法进行重写 Father F1=new Person(),父类的引用指向子类的对象,低--->高不需要强转,不过可能会遗失方法,高--->低要强转。
static private final修饰的无法进行重写

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}
 
class Dog extends Animal {
    @Override
    public void move() {
        System.out.println("狗可以跑和走");
    }
    public void bark() {
        System.out.println("狗可以吠叫");
    }
}
 
class TestDog {
//  形参类型只写一种Animal即可,如果没有向上转型,要写Dog,Fish,Cat等多种形参,那就累死了。
    public static void doEat(Animal h) {
        h.move();
    }
    public static void main(String args[]) {
        Animal a = new Animal(); // Animal 对象
// 下一行就是向上转型,需要Animal,给个Dog,也行吧,但是不能执行Dog类的特有方法了。
        Animal b = new Dog(); 
// 下一行需要Dog,给它Animal,肯定不行,编译出错!
//        Dog d =new Animal();  
        Dog c = new Dog();
        a.move();// 执行 Animal 类的方法
        b.move();//执行 Dog 类的方法
//        b.bark()  该方法使用失败
        c.bark();
//下两行体现了向上转型的精髓,假如没有向上转型,面对不同的实参,形参要写很多种,那样该方法要写多少个呀!!!!
        doEat(new Dog()); //狗可以跑和走
        doEat(new Animal()); //动物可以移动
    }
}

 

Static

四大修饰符

抽象类

接口

这里可以实现多个接口,实现多继承,接口只有方法的定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值