2023.3.30-Java-接口和抽象类

Main.java
public class Main {
public static void main(String[] args) {
demo sample1 = new demo();
sample1.list();
sample1.print();
testDemo sample2 = new testDemo();
sample2.method1();
sample2.method2();
System.out.println(sample2.sqrt(3.14)+sample2.calcircle()+sample2.calarea());
Crocodile sample3 = new Crocodile();
sample3.waterDo();
Outer outer = new Outer();
outer.print();
}
}
abstract class Demoo implements calrect{
String name;
abstract void method1();
abstract void method2();
}
class testDemo extends Demoo{
@Override
void method1() {
System.out.println("method 1");
}
@Override
void method2() {
System.out.println("method 2");
}
@Override
public int calarea() {
return 0;
}
@Override
public double calcircle() {
return 0;
}
}
interface OnEarthFunc{
void earthDo();
}
interface InWaterFunc{
void waterDo();
}
interface OnAirFunc{
void airDo();
}
class Vulture implements OnEarthFunc, OnAirFunc{
public void earthDo(){}
public void airDo(){}
}
class Crocodile implements OnEarthFunc, InWaterFunc{
public void earthDo(){System.out.println("Crocodile on earth!");}
public void waterDo(){System.out.println("Crocodile in water!");}
}
interface func{
void print();
}
interface show extends func{
void list();
}
class demo implements show{
public void print(){
System.out.println("print");
}
public void list(){
System.out.println("list");
}
}
class Outer{
private int index=10;
class Inner{
private int index=20;
void print() {
int index = 30;
System.out.println(this);
System.out.println(Outer.this);
System.out.println(index);
System.out.println(this.index);
System.out.println(Outer.this.index);
}
}
void print(){
Inner inner = new Inner();
inner.print();
}
}
/*
抽象类给所有由它派生出来的类创建一个公共的接口。
抽象类和接口,引入是为了解决没有多继承的问题。
抽象类不能被实例化。
一个类通过继承接口,以继承接口的抽象方法。
接口像一个插销,写在以接口名命名的.java文件里,然后,插到我的main类里面。
接口的变量,默认为public static final的。接口的方法都是public abstract的,只有说明没有定义。
不过,从java 8开始,允许给接口添加一个非抽象的方法实现。不过要使用default关键字。
Java 9可以:常量、抽象方法、默认方法、静态方法、私有方法、私有静态方法。
为了把接口插进类里面,类必须声明实现接口(implements),按指定参数个数类型返回。
接口的实现:
1. 静态方法,只能使用接口名称调用;
2. default方法属于实现接口的类的对象方法;
……
一般的应用里,最顶层的是接口,然后是抽象类实现接口,最后才到具体类实现。
接口--implements-->抽象类--extends-->具体类
final修饰符的作用:防止方法的重写或者类的继承。
内部类。
匿名类(创建一个类的对象,无需用到名字)直接new classname(){};。
可以用匿名类实现接口,new interfacename(){};
匿名内部类的编译后命名规则:outerclass.$n.class,n从1开始。
用一次就丢弃的类,所以不需要名字(哭)。
Java API提供了很多类和方法,直接调用(e. g. ……)
·Math类
包(需要import)
·java.lang
·java.io
·java.util
*/

calrect.java
public class Main {
public static void main(String[] args) {
demo sample1 = new demo();
sample1.list();
sample1.print();
testDemo sample2 = new testDemo();
sample2.method1();
sample2.method2();
System.out.println(sample2.sqrt(3.14)+sample2.calcircle()+sample2.calarea());
Crocodile sample3 = new Crocodile();
sample3.waterDo();
Outer outer = new Outer();
outer.print();
}
}
abstract class Demoo implements calrect{
String name;
abstract void method1();
abstract void method2();
}
class testDemo extends Demoo{
@Override
void method1() {
System.out.println("method 1");
}
@Override
void method2() {
System.out.println("method 2");
}
@Override
public int calarea() {
return 0;
}
@Override
public double calcircle() {
return 0;
}
}
interface OnEarthFunc{
void earthDo();
}
interface InWaterFunc{
void waterDo();
}
interface OnAirFunc{
void airDo();
}
class Vulture implements OnEarthFunc, OnAirFunc{
public void earthDo(){}
public void airDo(){}
}
class Crocodile implements OnEarthFunc, InWaterFunc{
public void earthDo(){System.out.println("Crocodile on earth!");}
public void waterDo(){System.out.println("Crocodile in water!");}
}
interface func{
void print();
}
interface show extends func{
void list();
}
class demo implements show{
public void print(){
System.out.println("print");
}
public void list(){
System.out.println("list");
}
}
class Outer{
private int index=10;
class Inner{
private int index=20;
void print() {
int index = 30;
System.out.println(this);
System.out.println(Outer.this);
System.out.println(index);
System.out.println(this.index);
System.out.println(Outer.this.index);
}
}
void print(){
Inner inner = new Inner();
inner.print();
}
}
/*
抽象类给所有由它派生出来的类创建一个公共的接口。
抽象类和接口,引入是为了解决没有多继承的问题。
抽象类不能被实例化。
一个类通过继承接口,以继承接口的抽象方法。
接口像一个插销,写在以接口名命名的.java文件里,然后,插到我的main类里面。
接口的变量,默认为public static final的。接口的方法都是public abstract的,只有说明没有定义。
不过,从java 8开始,允许给接口添加一个非抽象的方法实现。不过要使用default关键字。
Java 9可以:常量、抽象方法、默认方法、静态方法、私有方法、私有静态方法。
为了把接口插进类里面,类必须声明实现接口(implements),按指定参数个数类型返回。
接口的实现:
1. 静态方法,只能使用接口名称调用;
2. default方法属于实现接口的类的对象方法;
……
一般的应用里,最顶层的是接口,然后是抽象类实现接口,最后才到具体类实现。
接口--implements-->抽象类--extends-->具体类
final修饰符的作用:防止方法的重写或者类的继承。
内部类。
匿名类(创建一个类的对象,无需用到名字)直接new classname(){};。
可以用匿名类实现接口,new interfacename(){};
匿名内部类的编译后命名规则:outerclass.$n.class,n从1开始。
用一次就丢弃的类,所以不需要名字(哭)。
Java API提供了很多类和方法,直接调用(e. g. ……)
·Math类
包(需要import)
·java.lang
·java.io
·java.util
*/

终端输出
D:\SoftwareSet\Java\JDK19\jdk-19.0.2\bin\java.exe "-javaagent:D:\SoftwareSet\Java\javaIDE(jetbrains)\installPath\IntelliJ IDEA Community Edition 2022.3.2\lib\idea_rt.jar=40628:D:\SoftwareSet\Java\javaIDE(jetbrains)\installPath\IntelliJ IDEA Community Edition 2022.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\AllData\mess\2023_Java_lecture\上课抄代码\2023年3月30日\untitled\out\production\untitled Main
list
method 1
method 2
1.772004514666935
Crocodile in water!
Outer$Inner@10f87f48
Outer@b4c966a
30
20
10
Process finished with exit code 0