public abstract 返回值类型 方法名(参数列表);
public abstract class 类名{}
// demo
public class demo {
public static void main(String[] args) {
// 编写带有抽象类的标准JavaBean类
Frog frog = new Frog("青蛙", 2);
frog.eat();
frog.drink();
}
}
// 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;
}
public abstract void eat();
public void drink(){
System.out.println("喝水");
};
}
// Frog
public class Frog extends Animal{
public Frog() {
}
public Frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃虫子");
}
@Override
public void drink() {
System.out.println("喝水");
}
}
// demo
public class demo {
public static void main(String[] args) {
// 编写带有接口和抽象类的标准JavaBean类
Frog f = new Frog("青蛙", 2);
f.eat();
f.swim();
}
}
// 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;
}
public abstract void eat();
}
// Swim
public interface Swim {
void swim();
}
// Frog
public class Frog extends Animal implements Swim{
public Frog() {
}
public Frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃虫子");
}
@Override
public void swim() {
System.out.println("蛙泳");
}
}
public static final
public abstract
public class Demo {
public static void main(String[] args) {
/**
* 我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练
* 为了出国交流,跟乒乓球相关的人员都需要学习英语。
* 请用所有知识分析,在这个案例中,哪些是具体类,哪些是抽象类,哪些是接口?
*
* 乒乓球运动员:姓名,年龄,学打乒乓球,说英语
* 篮球运动员:姓名,年龄,学打篮球
* 乒乓球教练:姓名,年龄,教打乒乓球,说英语
* 篮球教练:姓名,年龄,教打篮球
*/
PingpongAthletes pingpongAthletes = new PingpongAthletes("乒乓球运动员", 30);
pingpongAthletes.speakEnglish();
pingpongAthletes.learn();
PingpongInstructor pingpongInstructor = new PingpongInstructor("乒乓球教练", 35);
pingpongInstructor.speakEnglish();
pingpongInstructor.teach();
BasketballAthletes basketballAthletes = new BasketballAthletes("篮球远动员", 31);
basketballAthletes.learn();
BasketballInstructor basketballInstructor = new BasketballInstructor("篮球教练", 36);
basketballInstructor.teach();
}
}
// Person
// 不希望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;
}
}
// Athletes
public abstract class Athletes extends Person{
public Athletes() {
}
public Athletes(String name, int age) {
super(name, age);
}
public abstract void learn();
}
// Instructor
public abstract class Instructor extends Person{
public Instructor() {
}
public Instructor(String name, int age) {
super(name, age);
}
public abstract void teach();
}
// SpeakEnglish
public interface SpeakEnglish {
public abstract void speakEnglish();
}
// BaskAthletes
public class BasketballAthletes extends Athletes{
public BasketballAthletes() {
}
public BasketballAthletes(String name, int age) {
super(name, age);
}
@Override
public void learn() {
System.out.println("学打篮球");
}
}
// PinAthletes
public class PingpongAthletes extends Athletes implements SpeakEnglish{
public PingpongAthletes() {
}
public PingpongAthletes(String name, int age) {
super(name, age);
}
@Override
public void learn() {
System.out.println("学打乒乓球");
}
@Override
public void speakEnglish() {
System.out.println("说英语");
}
}
// BaskInstr
public class BasketballInstructor extends Instructor{
public BasketballInstructor() {
}
public BasketballInstructor(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("教打篮球");
}
}
// PinInstr
public class PingpongInstructor extends Instructor implements SpeakEnglish{
public PingpongInstructor() {
}
public PingpongInstructor(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("教打乒乓球");
}
@Override
public void speakEnglish() {
System.out.println("说英语");
}
}
// Demo
public class Demo {
public static void main(String[] args) {
/**
* 需求:写一个Javabean类描述汽车
* 属性:汽车的品牌,车龄,颜色,发动机的品牌,使用年限。
*
* 内部类的访问特点:
* 内部类可以直接访问外部类的成员,包括私有
* 外部类要访问内部类的成员,必须创建对象
*/
}
}
// Car
public class Car {
private String carName;
private int carAge;
private String carColor;
public void show()
{
System.out.println(carName);
Engine e = new Engine();
System.out.println(e.engineName);
}
class Engine{
private String engineName;
private int engineAge;
public void show()
{
System.out.println(engineName);
System.out.println(carName);
}
}
}
成员内部类可以被修饰符修饰
成员内部类里, Jdk16之前不能定义静态变量
获取成员内部类对象的两种方式
1. 外部类编写方法, 对外提供内部类对象(private)
2. 直接创建: Outer.Inner oi = new Outer().new Inner();
// Demo
public class Demo {
public static void main(String[] args) {
Outer o = new Outer();
// Outer.Inner oi = o.getInstance();
// Inner是private, 无法Outer.Inner
Object oi = o.getInstance();
}
}
// Outer
public class Outer {
private String name;
private class Inner{
private String name;
}
public Inner getInstance(){
return new Inner();
}
}
public class Outer {
private int a = 10;
class Inner{
private int a = 20;
public void show(){
int a = 30;
// Outer.this => 外部类对象的地址值
System.out.println(Outer.this.a); // 10
System.out.println(this.a); // 20
System.out.println(a); // 30
}
}
}
注意事项:
1. 静态内部类也是成员内部类中的一种
2. 静态内部类只能访问外部类中的静态变量和静态方法,
如果想要访问非静态的需要创建外部类的对象。
创建静态内部类对象的格式:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
调用静态方法的格式:
外部类名.内部类名.方法名();
// Demo
public class Demo {
public static void main(String[] args) {
Outer.Inner oi = new Outer.Inner();
oi.show1();
// 静态方法
Outer.Inner.show2();
}
}
// Outer
public class Outer {
// 静态内部类
static class Inner{
public void show1(){
System.out.println("调用非静态方法");
}
public static void show2(){
System.out.println("调用静态方法");
}
}
}
new 类名或者接口名(){
重写方法;
};
黑马程序员. 阿玮Java零基础
https://gitee.com/yu-ba-ba-ba/awJava