java面向对象3

1.final和static关键字

final:是一个关键字,表示最终的意思。可以用来修饰类
修饰类:表明该类是最终类,不能被继承
修饰变量:表明该变量是常量,不能再次被赋值
修饰方法:表明该方法是最终方法,不能被重写

static:是一个关键字,静态的意思。可以用来修饰成员变量和成员方法。
static修饰成员的特点:
A:被类的所有对象共享。同样也是判断这个对象是否应该用static修饰的条件。
B:可以通过类名直接访问
C:优先于对象存在
D: 随着类的加载而加载

  • 非静态的成员方法:
  •  能访问静态的成员变量
    
  •  能访问非静态的成员变量
    
  •  能访问静态的成员方法
    
  •  能访问非静态的成员方法
    
  • 静态的成员方法:
  •  能访问静态的成员变量
    
  •  能访问静态的成员方法
    

表格展示分别能访问的部分:

非静态的成员方法方法静态的成员方法
静态的成员变量静态的成员变量
非静态的成员变量
静态的成员方法静态的成员方法
非静态的成员方法
  • 注意事项:
  •  静态成员方法中不能出现this,super这样的关键字。
    
  •  原因是:静态是随着类的加载而加载,this,super这样的关键字是随着对象的创建而存在。
    
  •  	    先进内存的,不能访问后进内存的。
    

2.抽象类

  • 抽象类的特点:
  •  A:抽象类和抽象方法必须使用abstract关键字修饰
    
  •  B:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
    
  •  C:抽象类不能实例化
    
  •  	抽象类如何实例化呢?
    
  •  	参照多态的方式,通过子类对象实例化。
    
  •  D:抽象类的子类
    
  •  	要么重写抽象类中的所有抽象方法
    
  •  	要么是抽象类
    

成员变量:
有成员变量:
有成员变量,成员变量可以是变量,也可以是常量。
构造方法:
有构造方法
抽象类中的构造方法的作用?
用于子类访问父类数据的初始化。
成员方法:
有成员方法,成员方法可以是抽象的,也可以是非抽象的。
抽象方法:限定子类必须完成某些动作
非抽象方法:提高代码的复用性

3.接口的概述以及练习

接口的特点:
A:定义接口使用的是interface关键字
B:类和接口之间是现实关系,用implement关键字表示
C:接口不能实例化
但是接口可以通过参杂多态的形式使用实现类来实例化。
D:接口的实现类
要么重写接口中的所有的抽象方法
要么是一个抽象类
多态的几种形式:
具体类多态(几乎不用)
抽象类多态(常用)
接口类多态(最常用了)
eg:
idea创建一个Interface 的测试
在这里插入图片描述
idea创建一个是InterFace的jummping的接口
在这里插入图片描述
在这里插入图片描述
然后写出抽象方法
public abstract void jump;
在这里插入图片描述
然后用一个类和这个接口产生关系
不能写extend而是用implement
在这里插入图片描述
抽象类也可以但是意义不大!
在这里插入图片描述
接口的成员特点:
final 常量!
成员变量:
有成员变量,而且变量只能是常量。
默认修饰符:public static final
构造方法:
没有构造方法
成员方法:
有成员方法,而且都是抽象的。
默认修饰符:public abstract
所以都应该写为public abstract void method();
Object:是类层次结构的根类,所有的类都直接的或者间接的继承自该类。

类与类、接口与接口、类与接口

*类与类

  • 继承关系,只能单继承,可以多层继承
  • 类与接口:
  • 实现关系,可以单实现,也可以多实现
  • 还可以在继承一个类的同时实现多个接口
  • 接口与接口:
  • 继承关系,可以单继承,也可以多继承
    抽象类和接口的区别
    *A成员区别
  • 抽象类:可以是变量,也可以是常量
  • 构造方法:有
  • 成员方法:可以是抽象方法,也可以是非抽象方法
  • 接口:
  • 成员变量:只能是常量
  • 成员方法:只能是抽象方法
  • B;关系区别
  • 类与类:继承关系,只能单继承,可以多层继承
  • 类与接口:实现关系,可以单实现,也可以多实现
  • 接口与接口:继承关系,可以单继承,也可以多继承
  • C:设计理论的区别
  • 抽象类被继承体系的是“is a” 抽象类中定义的是继承体系的共性功能
  • 接口被实现体现的是:“like a“ 接口中定义的是该体系的扩展功能
  • 举例
  • 猫:动物
  • 猫:跳高运动员
    练习:
    需求:猫狗案例,让所有的猫狗具备跳高的额外功能
  • 分析:从具体到抽象
  •  猫:姓名,年龄,吃饭(){}
    
  •  狗:姓名,年龄,吃饭(){}
    
  •  发现了共性的内容,就提取了一个父类。
    
  •  抽象动物类:
    
  •  	姓名,年龄,吃饭();
    
  •  猫:继承动物类
    
  •  狗:继承动物类
    
  •  跳高的额外功能是一个扩展功能,所以应该定义接口实现。
    
  •  跳高接口:
    
  •  	跳高();
    
  •  猫:继承动物类,实现跳高接口
    
  •  狗:继承动物类,实现跳高接口
    
  • 实现:从抽象到具体
  • 使用:使用的是具体的类的对象
  • 作业:具体的狗类,模仿着猫类给出。
  • 狗类的测试,也模仿着猫类的测试给出。	
    

1.猫狗共性所以建立一个父类 Animal

public abstract class Animal {
    //给出姓名年龄
    private String name;
    private int age;
    //无参和带参构造方法
    public Animal(){}
    public Animal(String name,int age){
        this.name=name;
        this.age =age;
    }
    //get set方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //抽象的吃饭方法
    public abstract void eat();

2.建立猫类Cat

public class Cat extends Animal implements Jummp{

    public Cat(){}
    public Cat(String name,int age){
        super(name,age);
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    @Override
    public void Jump() {
        System.out.println("猫跳高");

    }
}

狗一样

public class Dog extends Animal implements Jummp{

    public Dog(){}
    public Dog(String name,int age){
        super(name,age);
    }

    @Override
    public void eat() {
        System.out.println("狗吃骨头");

    }


    @Override
    public void Jump() {
        System.out.println("狗跳高");

    }

}

跳高是额外的建立一个接口

public interface Jummp {
    public abstract void Jump();
}

测试

public class InterfaceTest {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.setName("暹罗猫");
        c.setAge(2);
        System.out.println(c.getAge()+"--**"+c.getName());
        c.eat();
        c.Jump();
        System.out.println("*****");

        Cat c2 = new Cat("暹罗猫",2);
        System.out.println(c2.getName()+"***"+c2.getAge());
        c2.eat();
        c2.Jump();
        System.out.println("------------");

        Dog d = new Dog();
        d.setName("二狗");
        d.setAge(5);

        System.out.println(d.getAge()+"----"+d.getName());
        d.eat();
        d.Jump();
        System.out.println("----");

        Dog d2 = new Dog("二狗",5);
        System.out.println(d2.getAge()+"----"+d2.getName());
        d2.eat();
        d2.Jump();

    }



}

练习二
在这里插入图片描述
1.新建person类

public abstract class Person {
    private String name;
    private int age;

    public Person(){}
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();
}

1.0新建接口学英语

public interface SpeakEnglish {
    public abstract void speak();
}

2.新建运动员类`

public abstract class Player extends Person{
    public Player(){}
    public Player(String name,int age){
        super(name,age);
    }
    public abstract void study();
}

3.新建教练类

public abstract class Coach extends Person {
    public Coach(){}
    public Coach(String name,int age){
        super(name,age);
    }
    public abstract void Teach();
}

4.新建乒乓球运动员类

public class PingpangPlayer extends Player implements SpeakEnglish{
    public PingpangPlayer(){}
    public PingpangPlayer(String name,int age){
        super(name,age);
    }
    @Override
    public void eat() {
        System.out.println("乒乓球运动员吃白菜");

    }

    @Override
    public void study() {
        System.out.println("乒乓球运动员学接球和发球");

    }

    @Override
    public void speak() {
        System.out.println("乒乓球运动员学英语");

    }
}

5.篮球运动员类

public class basketballPlayers extends Player {
    public basketballPlayers(){}
    public basketballPlayers(String name,int age){
        super(name,age);
    }

    @Override
    public void eat() {
        System.out.println("篮球运动员吃牛排");
    }

    @Override
    public void study() {
        System.out.println("篮球运动员学习运球");

    }
}

5…0教练类

public abstract class Coach extends Person {
    public Coach(){}
    public Coach(String name,int age){
        super(name,age);
    }
    public abstract void Teach();
}

6.新建乒乓球教练类

public class PingpangCoach extends Coach implements SpeakEnglish{
    public PingpangCoach(){}
    public PingpangCoach(String name,int age){
        super(name,age);
    }
    @Override
    public void Teach() {
        System.out.println("乒乓球教练教发球");
    }

    @Override
    public void eat() {
        System.out.println("乒乓球教练吃白菜");

    }

    @Override
    public void speak() {
        System.out.println("乒乓球教练说英语");

    }
}

7.篮球教练

public class BasketballCoach extends Coach{
    public BasketballCoach(){}
    public BasketballCoach(String name,int age){
        super(name,age);
    }
    @Override
    public void Teach() {
        System.out.println("篮球教练吃牛排");

    }

    @Override
    public void eat() {
        System.out.println("篮球教练吃牛排");

    }
}

8.测试

public class InterfaceTest {
    public static void main(String[] args) {
        PingpangPlayer p =new PingpangPlayer();
        p.setName("马龙");
        p.setAge(23);
        System.out.println(p.getName()+p.getAge());
        p.eat();
        p.speak();
        p.study();
        System.out.println("----------");

        PingpangCoach pp =new PingpangCoach();
        pp.setName("张继科");
        pp.setAge(56);
        System.out.println(p.getAge()+p.getName());
        pp.eat();
        pp.speak();
        pp.Teach();
        System.out.println("--------------");

        basketballPlayers b =new basketballPlayers();
        b.setName("林书豪");
        b.setAge(18);
        System.out.println(b.getAge()+b.getName());
        b.eat();
        b.study();
        System.out.println("------------");

        BasketballCoach B =new BasketballCoach();
        B.setName("科比");
        B.setAge(65);
        System.out.println(B.getAge()+B.getName());
        B.Teach();
        B.eat();

在这里插入图片描述

4.包的概述和权限修饰符

包:就是文件夹
作用:就是对类的分类管理。
举例:
按照功能分
按照模块分
包的定义格式:
package 包名;
如果是多级包用.隔开
注意事项:
A:package必须是程序的第一条可执行语句
B: package语句在一个Java文件中只能有一个

导包:
import 包名(路径和包名和类);
import

权限修饰符

权限修饰符:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值