二刷java继承第十天——面向对象(结束)
Posted 名字真的很急用
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二刷java继承第十天——面向对象(结束)相关的知识,希望对你有一定的参考价值。
匿名对象
* 没有名字的对象
* 堆区的那个地址,没有用变量来保存
匿名对象的使用场景
* 快速访问 (测试)
* 传参
public class test01 {
public static void main(String[] args) {
new mi();
new mi().a=18;
//匿名对象
new mi().q();
Q(new mi());
}
public static void Q(mi m) {
System.out.println("tom");
}
}
class mi{
int a;
public void q() {
System.out.println(17);
}
}
内部类(外部类$内部类)
-
在类中定义类
-
允许在类的内部,再去定义类
内部类
- 类中方法外 (成员内部类)
- 外部类.内部类 变量名 = new 外部类().new 内部类();
- 方法中(局部内部类)
public class test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
AK.B b = new AK().new B();
System.out.println(b);
AK A = new AK(); //调用局部内部类
A.kk(); //调用外层方法
}
}
//内部类
class AK{
int a;
class B{
int b;
}
public void kk() {
class R{
public void z() {
System.out.println("fafa");
}
}
new R().z(); //局部内部类需要在方法new这个方法,在外层方法里
}
}
匿名内部类
*快速的实例化接口,或者抽象类
-
一般采用多态的手法去实例化(用变量来保存该匿名内部类)
-
new 接口/抽象类(){ 重写父类的方法 }; new 接口/抽象类(){ 重写父类的方法 }.方法名();
public class test03 {
//利用了多态
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
new map(){
public void ma() {
System.out.println("我是匿名内部类"); 匿名内部类的格式
}
};
*/
// System.out.println(
//
//
// new map(){
//
// //输出的是一个内部类的地址
// public void ma() {
// System.out.println("我是匿名内部类");
// }
//
//
// }
//
//
// );
/*
new map(){
public void ma() {
System.out.println("我是匿名内部类"); // 匿名内部类的格式 需要重写接口中的方法
//调用接口中的方法
}
}.ma();
*/
map ma =new map(){
public void ma() {
System.out.println("我是匿名内部类"); // 匿名内部类的格式 可以直接赋值给数据类型
}
};
ma.ma(); //然后可以这样直接调用接口中的方法
}
}
interface map{
public void ma();
}
代码块
构造代码块(类中方法外)
* 在创建对象的时候调用
* 优于构造方法
局部代码块(方法内)
静态代码块,在代码快加static;常用
* 加载数据
* 加载驱动
* 媒介 : 系统软件和硬件的连接者
public class test04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Y y = new Y();
/*
* 父类静态代码块
子类静态代码块
父类的普通d代码块
父类的无参构造方法
子类的普通d代码块
子类的无参构造方法
*/
y.G();//子类方法中的代码块
}
}
class X{
static {
System.out.println("父类静态代码块");
}
public X(){
System.out.println("父类的无参构造方法");
}
{
System.out.println("父类的普通d代码块");
}
public void G() { //方法中不能定义静态代码块
{
System.out.println("父类方法中的代码块");
}
}
}
class Y extends X{
static {
System.out.println("子类静态代码块");
}
public Y(){
System.out.println("子类的无参构造方法");
}
{
System.out.println("子类的普通d代码块");
}
public void G() { //重写父类中的方法 //方法中不能定义静态代码块
{
System.out.println("子类方法中的代码块");
}
}
}
修饰符
public | protected | 空白 | private | |
---|---|---|---|---|
同一个类 Y | Y | Y | Y | |
同一个包(子类/无关类) Y | Y | Y | ||
不同包(子类) Y | Y | |||
不同包无关类 Y |
以上是关于二刷java继承第十天——面向对象(结束)的主要内容,如果未能解决你的问题,请参考以下文章