Java 抽象类

导入:

1.student和teacher—》继承自person

1.1 写student

package com.xujc;

public class Student {
	private String name;
	private int 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;
	}

}

1.2 写 teacher

package com.xujc;

public class Teacher {
	
		private String name;
		private int 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;
		}
		

	}


1.3 student和teacher继承自person

2.继承的时候有些方法不同,且容易忘了写—》抽象方法—》抽象类

3.多个方法改成一个方法调用student和frog

4.狗吃饭 ,st和frog游泳,想同时用怎么办–》接口类


--------文章详情------------------

01 — 抽象类

抽象类是一种不能被实例化的类,它的主要目的是作为其他类的基类,定义共同的方法或属性。抽象类在面向对象编程中扮演着重要的角色,它们通常包含抽象方法,这些方法只有声明而没有具体的实现。这样做的目的是为了让子类继承抽象类,并提供这些方法的具体实现(强制性)。

抽象类的关键特点:

  • 不能实例化:抽象类不能直接被实例化,也就是说,你不能使用new关键字来创建一个抽象类的实例。
  • 必须被继承:由于抽象类中的抽象方法没有具体实现,因此抽象类必须被其他类继承。
  • 包含抽象方法:抽象类可以包含抽象方法,这些方法只有方法签名而没有方法体。
  • 可以有构造方法

例子

设想我们正在开发一个图形编辑软件,其中包含多种形状(Shape),如圆形(Circle)、矩形(Rectangle)和三角形(Triangle)。这些形状都有一些共同的特性和行为,例如它们都可以被移动(move)、旋转(rotate)和绘制(draw)。

// 抽象类 Shape
public abstract class Shape {
    public abstract void move();
    public abstract void rotate();
    public abstract void draw();
}

// 具体类 Circle 继承自 Shape
public class Circle extends Shape {
    @Override
    public void move() {
        // 实现移动一个圆形的具体逻辑
    }

    @Override
    public void rotate() {
        // 实现旋转一个圆形的具体逻辑
    }

    @Override
    public void draw() {
        // 实现绘制一个圆形的具体逻辑
    }
}

// 具体类 Rectangle 继承自 Shape
public class Rectangle extends Shape {
    // ... 类似Circle的实现
}

// 具体类 Triangle 继承自 Shape
public class Triangle extends Shape {
    // ... 类似Circle的实现
}

02 — 多态

多态是面向对象编程的一个重要特性,它允许一个类的引用变量指向另一个类的对象。在Java中,多态的实现主要依赖于继承、接口和方法重写。

例子

假设我们有一个动物类(Animal)和两个子类:猫(Cat)和狗(Dog)。

public class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("喵喵喵");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myCat = new Cat();
        Animal myDog = new Dog();

        myCat.makeSound(); // 输出:喵喵喵
        myDog.makeSound(); // 输出:汪汪汪
    }
}

03 — 接口

接口是Java中一个核心的面向对象编程概念,它定义了一组方法的规范,用于规定某个类或多个类应具有的行为。

例子

假设我们创建一个青蛙类:

public class Frog {
    public void swim() {
        System.out.println("青蛙游泳了!");
    }
}

如果我们想要设计一个方法,可以同时调用Student类和Frog类中的swim()方法,则需要使用接口:

public interface Swimable {
    public void swim();
}

public class Student extends Person implements Swimable {
    public void swim() {
        System.out.println("学生游泳了!");
    }
}

public class Frog implements Swimable {
    public void swim() {
        System.out.println("青蛙游泳了!");
    }
}

public class Test {
    public static void getFromWater(Swimable s) {
        s.swim();
        System.out.println("拿到了东西");
    }

    public static void main(String[] args) {
        getFromWater(new Student());
        getFromWater(new Frog());
    }
}

小结

  • 定义接口:使用interface关键字定义接口。
  • 使用接口:类使用implements关键字实现接口,并提供所有方法的具体实现。
  • 接口特点
    • 不能实例化。
    • 没有构造方法。
    • 可以有多态性。
    • 可以继承其他接口。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值