静态内部类
1. 内部类可以访问外部静态变量方法
2.内部无法访问 外部的成员方法或变量
3.开发中用到的比较少
package com.java.polymorphic;
public class innerClass {
public static String name = "王伟琪";
private String age = "23岁";
public static class inner{
private String name = "上坂堇";
private void say (){
System.out.println(this.name+ "是一个可爱的小姑娘~");
}
public inner(){
System.out.println("成功进入内部类!");
System.out.println(name);
}
}
public static void main(String[] args) {
innerClass ic = new innerClass();
innerClass.inner inner = new innerClass.inner();
inner.say();
}
}
成员内部类
不用static 修饰的内部类
使用方法 new 外部实例对象之后 再 new 内部类
内部类可以访问外部静态变量方法
内部可以访问 外部的成员方法或变量
package com.java.polymorphic;
public class innerClass {
public static String name = "王伟琪";
private String age = "23岁";
public class in{
public void inner(){
System.out.println("内部方法");
}
public in(){
System.out.println("进入成员内部类");
}
}
public static void main(String[] args) {
innerClass.in in = new innerClass().new in();
}
}
匿名内部类
方便创建子类对象,为了简化代码编写
抽象类无需被继承,只需通过匿名内部类实现该抽象方法即可
abstract class Animals{
public abstract void run();
}
public static void main(String[] args) {
Animal cat = new Animal() {
@Override
void run() {
System.out.println("run方法被重写了...");
}
};
并不是将接口实例化,而是定义了swiming的匿名内部类
package com.java.polymorphic;
interface swim{
void swim();
}
public class swiming {
public static void go(
new swim() {
@Override
public void swim() {
System.out.println("快乐的自由泳~");
}
};
){
}
public static void main(String[] args) {
swiming.go(s);
}
}
.equals
默认比较地址 在子类重写以便更具体地比较类的内容
重写 toString 和 equals方法
class student{
private String name;
private String age;
public student(String name,String age){
this.age=age;
this.name = name;
}
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
student student = (student) o;
return Objects.equals(name, student.name) &&
Objects.equals(age, student.age);
}
}
// Objects.equals 更加安全 更准确!
class tet extends student{
public tet(String name, String age) {
super(name, age);
}
public static void main(String[] args) {
tet t = new tet("上坂堇","30岁");
String str = t.toString();
System.out.println(str);
}
}