• java学习--day11(抽象类、接口)


    day10作业

    1.成员变量和局部变量的区别
    	成员变量:
    		定义在类体中,整个类可以使用
    	局部变量:
    		定义在方法中,只能在方法使用
    2.继承的语法格式
    	class B extends A {
    	
    	}
    3.关于属性和方法子类继承父类一些要求
    	不能使用父类的私有化的属性和方法
    4.重写的目的
    	父类的需求不能满足子类的需求
    5.重写和重载的区别
    	重写:
    		1.必须继承关系
    		2.在子类中去重写
    		3.除了方法体不一样其他都一样的
    		4.不能是私有化方法
    	重载:
    		1.必须再一类中,至少两个方法
    		2.方法名字必须一样,参数类型 一定不一样
    		3.返回值可以不一样
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    今天的内容

    1.super关键字

    2.抽象类

    3.final关键字

    4.接口

    1.super关键字

    只能用于继承,并在子类中使用。代表的意思是父类对象

    this:

    ​ 代表当前类对象。

    ​ 可以调用属性和方法

    ​ 可以调用构造方法

    super:

    ​ 代表是父类的对象

    ​ 可以调用父类的成员变量和成员方法

    ​ 注意事项:当super调用属性的时候,就是内存里面那一个

    ​ 可以调用父类的构造方法

    ​ 真实开发的时候, super.父类的方法。证明在调用父类的方法

    package com.qfedu.b_super;
    class Father1 {
    	String name;
    	public Father1 () {
    		System.out.println("Father1的无参构造");
    	}
    	public Father1 (String name) {
    		System.out.println("Father1有参构造");
    	}
    }
    class Son1 extends Father1 {
    	//在子类中无论你写了有参构造和无 参构造,都要去执行父类的无参构造
    	//除非你自己调用父类有参构造方法
    	public Son1(String name) {
    		//在调用父类的无参构造方法
    		//super();
    		super("狗蛋");
    	}
    }
    public class Demo2 {
    	public static void main(String[] args) {
    		Son1 son1 = new Son1("狗蛋");
    		
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    2.抽象类【重要】

    在面向对象中,所有的对象可以通过类来创建。反过来说,并不是所有的类都可以创建对象的。如果一个类中没有足够完整的信息来描述具体的对象的话,那么这个类叫抽象类。

    在Java中使用关键字abstract修饰类,这个类叫抽象类。

    2.1abstract关键字

    abstract修饰的类叫抽象类

    abstract修饰的方法叫抽象方法

    总结:abstract 只能修饰类和方法

    语法格式:

    abstract class 类名{
    	普通的方法;
    	public void eat () {
    
    
    	}
    	抽象方法;
    	public abstract void sleep ();
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    入门案例:

    先学会说声明出来一个抽象类

    package com.qfedu.c_abstract;
    
    //声明一个抽象类
    abstract class Person {
    	
    	//在抽象类中可以写普通成员方法
    	public void eat () {
    		System.out.println("今天中午吃外卖。。。。。。");
    	}
    	//定义一个抽象方法  是不完整的方法  没有方法体的
    	abstract public  void work();
    	
    }
    //定义了咋用啊? 抽象类创建不了对象的 咋解决?
    //解决方案: 再写一个普通类去继承抽象类即可
    class Man extends Person {
    	//the type Man must implement the inherited 
    	//abstract method Person.work()
    	@Override
    	public void work() {
    		// TODO Auto-generated method stub
    		System.out.println("劳动力");
    	}
    	
    }
    public class Demo1 {
    	public static void main(String[] args) {
    		Man man = new Man();
    		man.eat();
    		man.work();
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    注意事项:

    ​ 1.如果一个类中用abstract修饰的话,那么这个类叫抽象类

    ​ 2.抽象类中可以有普通成员方法和抽象方法

    ​ 3.抽象方法没有方法体,是不完整的方法

    ​ 4.抽象类不能被实例化

    ​ 5.写一个普通的类去继承抽象类

    ​ 6.在子类中一定去实现(重写)抽象类中所有的抽象方法

    ​ 7.非抽象方法可以重写也可以不重写

    ​ 8.一个抽象类能不能去继承另外一个抽象类? 可以的!!!

    ​ 9.抽象类可以继承非抽象类

    package com.qfedu.c_abstract;
    
    class Cell {
    	public void add () {
    		System.out.println("分裂");
    	}
    }
    abstract class Animal extends Cell{
    	public abstract void run();
    }
    abstract class Monkey extends Animal{//抽象类
    	public void call () {//普通的成员方法
    		System.out.println("咿咿呀呀.......");
    	}
    	public abstract void eat();
    	public abstract void sleep();
    }
    class People extends Monkey {
    
    	@Override
    	public void eat() {
    		// TODO Auto-generated method stub
    		System.out.println("吃肉!!!");
    	}
    
    	@Override
    	public void sleep() {
    		// TODO Auto-generated method stub
    		System.out.println("躺着睡。。。");
    	}
    	@Override
    	public void call() {
    		System.out.println("嘻嘻哈哈说话");
    	}
    
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		System.out.println("人站立奔跑。。。");
    	}
    	
    }
    public class Demo2 {
    	public static void main(String[] args) {
    		People people = new People();
    		people.add();
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    练习:

    ​ 抽象类:

    ​ Animal:

    ​ play()方法 抽象方法

    ​ eat方法 抽象方法

    ​ sleep方法 普通方法

    ​ Panda类去继承ANimal

    ​ Cat类去继承ANimal

    ​ 实例化Panda Cat 调用 上面的几个方法。

    3.final关键字

    final中文意思: 修饰符

    ​ 最终的,最后的

    用法:

    ​ 1.final可以修饰成员变量

    ​ 使用final修饰的成员变量,一定要赋值(初始化)。而且不能修改。

    ​ 2.final可以修饰局部变量

    ​ 使用final修饰局部变量的时候,可以先对变量不赋值,使用之前进行赋值。

    ​ 但是一旦赋值以后就无法更改。

    ​ 3.final可以修饰成员方法

    ​ final修饰的成员方法不能被重写,牵涉到继承

    ​ 4.final可以修饰一个类

    ​ final修饰的类不能被继承

    ​ 5.final可以修饰对象的引用

    ​ 修饰对象引用 一旦被赋值 就无法改变

    package com.qfedu.d_final;
    
     class Person {
    	final String name = "狗蛋";
    	
    	public void test () {
    		 final int i;
    		i = 30;
    		//i = 80;//一旦被赋值,就无法改变了
    		System.out.println(i);
    	}
    	 public final void eat () {
    		System.out.println("吃饭");
    	}
    }
    //class Man extends Person {
    //	@Override
    //	public void eat() {
    //		System.out.println("吃的多");
    //	}
    //}
    public class Demo1 {
    	public static void main(String[] args) {
    		final Person person = new Person();
    		System.out.println("Person:" + person);
    		//一旦使用final修饰person 对象引用 是一个固定的内存地址
    		Person person1 = new Person();
    		System.out.println("Person1:"+ person1);
    		//person.name = "嘻嘻";
    		//person = person1;//将person1赋值给了person对象
    		System.out.println(person);
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    4.接口【重要】

    4.1生活中的接口

    USB

    插座

    起到一个扩展的功能

    4.2Java中接口

    语法格式:

    interface  接口名字 {
    	成员变量
     成员方法
    }
    
    • 1
    • 2
    • 3
    • 4

    实现接口使用关键字implements

    package com.qfedu.e_interface;
    
    interface A {
    	//接口下面的属性都是常量   常量是使用static 和final修饰的
    	//只不过在接口中把 static和fianls省去了 常量的名字都要大写
    	String NAME = "狗蛋";
    	//在接口一般不写属性的!!!
    	//成员方法  在接口中全部是抽象的方法
    	public void eat ();
    	public void sleep();
    	
    }
    //无法实例化接口A ,咋办?新建一个类去实现(implements)接口
    class TestA implements A {
    
    	@Override
    	public void eat() {
    		// TODO Auto-generated method stub
    		System.out.println("吃好饭");
    	}
    
    	@Override
    	public void sleep() {
    		// TODO Auto-generated method stub
    		System.out.println("睡好觉");
    	}
    	
    }
    public class Demo1 {
    	public static void main(String[] args) {
    		TestA testA = new TestA();
    		testA.eat();
    		testA.sleep();
    		
    		System.out.println(testA.NAME);
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    接口的注意事项:

    ​ 1.使用关键字 interface 声明出来一个接口

    ​ 2.接口面可以有属性,但是是static 和final修饰的属性。被称为常量。几乎不用

    ​ 3.接口下面全部抽象的方法,不带方法体的

    ​ 4.jdk1.8以后是可以有默认(default)的方法的,这个默认方法带有方法体【重点!!!】

    ​ 5.接口下面没有构造方法,不能被实例化

    ​ 6.去使用一个普通的类去实现这个接口,使用关键字implements

    ​ 7.一定要在实现类中去实现所有的抽象方法

    ​ 8.一个普通的类可以实现多个接口,弥补了单继承的局限性

    ​ 9.一个接口可以去继承另外一个接口

    package com.qfedu.e_interface;
    
    interface B2 {
    	public void work();
    }
    interface B1 extends B2{
    	public void smoking();
    }
    
    interface A1 {
    	String NAME = "狗蛋";
    	
    	
    	public void test();
    	public void eat();
    	public default void sleep () {
    		System.out.println("睡觉睡得啥也不知道");
    	}
    }
    class TestA1 implements A1, B1{
    
    	@Override
    	public void test() {
    		// TODO Auto-generated method stub
    		System.out.println("测试");
    	}
    
    	@Override
    	public void eat() {
    		// TODO Auto-generated method stub
    		System.out.println("吃东西");
    	}
    	@Override
    	public void sleep() {
    		System.out.println("睡得什么都不会了");
    	}
    
    	@Override
    	public void smoking() {
    		// TODO Auto-generated method stub
    		System.out.println("不要在整栋楼抽烟!!!");
    	}
    
    	@Override
    	public void work() {
    		// TODO Auto-generated method stub
    		
    	}
    	
    }
    public class Demo2 {
    	public static void main(String[] args) {
    		TestA1 testA1 = new TestA1();
    		testA1.eat();
    		testA1.test();
    		testA1.sleep();
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    4.3案例

    电脑类去实现以下的三个接口。

    ​ 电源接口

    ​ 鼠标接口

    ​ 网络接口

    比如上面有三个接口,电脑是一个类,让电脑本身不具备插电源 连网线连鼠标的

    只有在电脑类基础之上 去实现三个接口之后,那么电脑就会拥有充电 联网连鼠标这些功能的

    package com.qfedu.e_interface;
    
    
    //电源接口
    interface Adapter {
    	public void input();//充电
    }
    //USB 接口 连接鼠标
    interface USB {
    	public void mouse();
    }
    //网络接口   可以联网
    interface Net {
    	public void internet();
    }
    class Computer implements Adapter, USB, Net{
    
    	@Override
    	public void internet() {
    		// TODO Auto-generated method stub
    		System.out.println("联网");
    	}
    
    	@Override
    	public void mouse() {
    		// TODO Auto-generated method stub
    		System.out.println("连接鼠标");
    	}
    
    	@Override
    	public void input() {
    		// TODO Auto-generated method stub
    		System.out.println("充电!!!");
    	}
    	
    }
    public class Demo3 {
    	public static void main(String[] args) {
    		Computer computer = new Computer();
    		computer.mouse();
    		computer.input();
    		computer.internet();
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    4.4案例

    假如学校有接待处。接待不同的人,有不同的方式。

    身份
    学生食堂学生宿舍
    老师教师食堂教师公寓
    领导招待所招待所

    理论上来讲,每个人都是一个不同的对象。实现各自的方法

    咱们能归纳出来一个模板。让学生 老师 领导 都去实现这个模板。

    package com.qfedu.e_interface;
    
    interface Person {
    	void eat();
    	void sleep();
    	
    }
    class Stdudent implements Person {
    
    	@Override
    	public void eat() {
    		// TODO Auto-generated method stub
    		System.out.println("在学生食堂......");
    	}
    
    	@Override
    	public void sleep() {
    		// TODO Auto-generated method stub
    		System.out.println("在宿舍睡觉");
    		
    	}
    	
    }
    class Teacher implements Person {
    
    	@Override
    	public void eat() {
    		// TODO Auto-generated method stub
    		System.out.println("在教师食堂。。。。。。");
    	}
    
    	@Override
    	public void sleep() {
    		// TODO Auto-generated method stub
    		System.out.println("在教师公寓。。。。。。");
    	}
    	
    	
    }
    class Leader implements Person {
    
    	@Override
    	public void eat() {
    		// TODO Auto-generated method stub
    		System.out.println("招待所吃。。。");
    	}
    
    	@Override
    	public void sleep() {
    		// TODO Auto-generated method stub
    		System.out.println("在招待所。。。。");
    	}
    	
    }
    public class Demo4 {
    	public static void main(String[] args) {
    		//实例化三个对象,调用方法即可
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
  • 相关阅读:
    2023年9月青少年软件编程(C 语言) 等级考试试卷(八级)
    开源项目丨Taier1.2版本发布,新增工作流、租户绑定简化等多项功能
    前端实现搜索关键字高亮功能:
    eclipse 某个文件不能编辑
    跨境电商:YouTube视频营销必看攻略
    Spring基于Annotation装配Bean
    shell脚本详解
    集合系列(十八) -List集合移除元素的坑点总结
    微博数据可视化分析:利用Python构建信息图表展示话题热度
    何为自制力?如何提高自制力?
  • 原文地址:https://blog.csdn.net/m0_46202060/article/details/133049828