`
danielhjd
  • 浏览: 246346 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

(笔记)关于java中的一些问题

    博客分类:
  • Java
阅读更多

第一题:

package william;

abstract class Name {
	private String name;
	public abstract boolean inStupidName(String name){
		System.out.println("okay");
	};
}

 

报错:



 问题:1) Abstract methods do not specify a body;

          2) This method must return a result of type boolean;

          3) The field Name.name is never read locally;

 

第二题:

package william;

public class Outer {
	private String str="this is outter";
		class Inner{
		String str="this is inner";
		void inner_f1(){
			System.out.println(this.str);
			System.out.println(new Outer().str);

		}
	}
	

	
	public static void main(String[] args){
		Outer out=new Outer();
		Outer.Inner inner=out.new Inner();
		inner.inner_f1();
	}
}

 

注意问题:

1:Outer out=new Outer(); Outer.Inner inner=out.new Inner(); 实例化一个内部类;

     No enclosing instance of type Outer is accessible. Must qualify the allocation with an enclosing instance of type Outer (e.g. x.new A() where x is an instance of Outer).

2:System.out.println(this.str);  System.out.println(new Outer().str);

 

第三题:

public class C extends B implements A {
	public void pX(){
		System.out.println(super.str);
		System.out.println(A.str);
	}
	public static void main(String[] args) {
		new C().pX();

	}

}

注意问题:

1:调用父类,用super;

2:调用接口,不需要instantiate;The static field A.str should be accessed in a static way;

 

第四题:

class A;

package test;

 class A {
	String s;

 A(String s) {
		this.s=s;
	}
	public void print(){
		System.out.println(s);
	}
}

 

Class Testt;




 

报错:

1)Implicit(不明确的) super constructor A() is undefined for default constructor. Must  define an explicit (明确的)constructor;

2)如果删除A类中的构造方法,这个程序可以通过编译但是由于S没有赋值输出的结果为null;

 

修改:

package test;

public class Testt extends A {

	Testt(String s) {
		super(s);
		// TODO Auto-generated constructor stub
	}

	public static void main(String[] args) {
		Testt t=new Testt("s");
		t.print();
	}

}

 

注意:

1)此处是含参数的构造器constructor;

 

第五题;

package test;

public class TestB extends TestA {
	public void start(){
		System.out.println("TestB");
	}
	public static void main(String[] args) {
	((TestA)new TestB()).start();
	
	}

}

 无报错,可以通过编译;

输出结果为:

TestB

1)  override
 

 第六题:有关继承的关系;

  TestA

package test;

class TestA {
	String test="Hello TestA";
	public void start(){		
		System.out.println("TestA");
	}
}

 TestB

package test;

public class TestB extends TestA {
	String test="Hello testB";
	public void start(){
		System.out.println(super.test);
		System.out.println("TestB");
		System.out.println(test);
	}
	public static void main(String[] args) {
		 TestA t= new TestB();
	     t.start();
	     System.out.println(t.test);
	
	}

}

 

输结果:

Hello TestA
TestB
Hello testB
Hello TestA

 

1)在主函数中,如何调用父类调用父类的属性和方法;

	public static void main(String[] args) {
		 TestA t= new TestA();
	     t.start();
	     System.out.println(t.test);
	
	}

输出结果:

TestA
Hello TestA

 

 2)在主函数中,如何通过子类调用父类的属性,同时又可以调用子类的属性和方法;

	public static void main(String[] args) {
		 TestA t= new TestB();
	     t.start();
	     System.out.println(t.test);
	
	}

 输出结果:

Hello TestA
TestB
Hello testB
Hello TestA

 

3)在主函数中,如果子类overide父类的方法,那么父类的方法还可以被子类调用吗?

在2)中我们用父类实例了一个对象t,结构调用start()的方法时,却是调用子类的方法。

Parent;

package test;

class Parent {
	public Parent() {
	   System.out.println("Parent_constructor");
	   test();
	}

	public void test() {
	   System.out.println("Parent_test");
	}
	}

 Child;

package test;

public class Child extends Parent {
	private String name = "张三丰";
	public Child() {
		super();
		this.test();
	   System.out.println("Child_constructor");

	}

	public void test() {
	   System.out.println("Child_test,name=" + name);
	}

	public static void main(String[] args) {
    new Child();   
	}
	}

输出结果;

Parent_constructor
Child_test,name=null
Child_test,name=张三丰
Child_constructor

总结:

1:当父类不含有construtor;

     a.子类没有override父类的方法

        子类实例化对象可以直接调用父类的方法和属性;如果属性父类和子类有相同的属性,在调用父类的属性时,通过Parent p=new Child();可以获取parent的属性...

package test;

class Parent {

	public void test1() {
	   System.out.println("Parent_test");
	}
	}

 

package test;

public class Child extends Parent {
	private String name = "张三丰";
	public void test() {
	   System.out.println("Child_test,name=" + name);
	}

	public static void main(String[] args) {
   Child t=new Child();  
   t.test();
   t.test1();
   System.out.println(t.name);
    
	}
	}

 

      如果属性父类和子类有相同的属性,在调用父类的属性时,通过Parent p=new Child();可以获取parent的属性...

package test;

class Parent {
	String name="张二疯";
	
	public void test1() {
	   System.out.println("Parent_test");
	}
	}

 

package test;

public class Child extends Parent {
	private String name = "张三丰";
	public void test() {
	   System.out.println("Child_test,name=" + name);
	}

	public static void main(String[] args) {
		Child c=new Child();
		Parent p=new Child();  
		p.test1();
		System.out.println(c.name);
		System.out.println(p.name);
    
	}
	}

  

     b.子类overrride父类的方法

        无论是通过子类实例化 还是父类通过子类实例化,因为父类的方法被子类override所以输出的结果都是一样;

 

package test;

class Parent {
	String name="张二疯";
	
	public void test() {
	   System.out.println("Parent_test");
	}
	}

 

package test;

public class Child extends Parent {
	private String name = "张三丰";
	public void test() {
	   System.out.println("Child_test,name=" + name);
	}

	public static void main(String[] args) {
		Child c=new Child();
		Parent p=new Child();  
		c.test();
		p.test();
		System.out.println(c.name);
		System.out.println(p.name);
    
	}
	}

 

输出:

Child_test,name=张三丰
Child_test,name=张三丰
张三丰
张二疯

 

2:当父类含有不含参数的construtor;

     子类的默认的construtor;继承了父类的construtor;

package test;

class Parent {
	public Parent() {
	   System.out.println("Parent_constructor");
	   test();
	}
	
	public void test() {
	   System.out.println("Parent_test");
	}
	}

 

 

package test;

public class Child extends Parent {
	private String name = "张三丰";
	public void test() {
	   System.out.println("Child_test,name=" + name);
	}

	public static void main(String[] args) {
		new Child();
	}
	}

 

package test;

public class Child extends Parent {
	private String name = "张三丰";

	public Child() {
		super();
	}

	public void test() {
	   System.out.println("Child_test,name=" + name);
	}

	public static void main(String[] args) {
		new Child();
	}
	}

  

输出结果:

Parent_constructor
Child_test,name=null

2:当父类含有含参数的construtor;

    在子类中必须声明一个含参数的construtor,并super()继承,如第四题。

第七题:

父类:

  class ExamSuperA {
	int m = 0;
	int n = 0;
	long f(){
		return m+n;
	}
}

 

子类:

class B extends ExamSuperA{
		int m=1,n=1;
		long f(){
			long result = 0;
			super.m=10;
			super.n=20;
			result = super.f()+(m+n);
			return result;
		}
	long g(){
		long result = 0;
		result = super.f()+(m+n);
		System.out.println(super.m);
		return result/2;
	}
}
public class ExamSuper {
	public static void main(String[] args) {
		B b = new B();
		b.m =3;
		b.n = 7;
		long resultOne = b.g();
		long resultTwo = b.f();
		long resultThree = b.g();

		System.out.println("resultOne="+resultOne);
		System.out.println("resultTwo="+resultTwo);
		System.out.println("resultThree="+resultThree);
	}

}

 

输出结果:

0

10

resultOne=5

resultTwo=40

resultThree=20

 

总结:

通过子类实例化 b  

执行long resultOne = b.g(); super.m=0 所以输出的第一个结果为“0”;

执行long resultTwo = b.f();由于子类override父类的,所以此时调用的f()方法是子类的,子类f()方法中又将super.m;和super.n重新赋值;

执行long resultOne = b.g();其中调用的Super.f()中m.n属性的值已经通过子类修改,所以super.f()的值也发生了改变...

特别注意:super.f()中的属性被修改了 区别于:为什么在Operate这个方法中运行后,X的值改变,但Y没有?

 

 

 

Child c=new Child();

Parent p=new Child();

对象c不仅有自己属性和方法,还继承了父类的方法和属性;

如果子类将父类的方法override了,那么用对象c调用的方法为Child 类的方法;p的方法也将被子类的方法override了,也就是说p的方法被override了,原来的方法不存在了。

如果子类将父类的属性同名,可以通过p来调用parent的同名属性。

 

  • 大小: 24.8 KB
  • 大小: 25.8 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    java超强笔记

    随着对基础知识的掌握,笔记会进一步带你探索Java集合框架,包括数组列表、链表、队列、栈、映射等数据结构,以及它们在实际问题中的应用。此外,多线程编程也是Java的一大亮点,笔记会介绍线程的创建与同步机制,如...

    java笔记java笔记

    java笔记java笔记java笔记java笔记java笔记java笔记java笔记

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    java笔记 java笔记

    异常处理是Java中的一个重要特性,用于处理程序运行过程中发生的错误情况。 - **异常基本概念**:异常是在程序执行过程中发生的问题。 - **捕获异常**:使用try-catch语句块来捕获异常。 - **处理异常**:可以抛出...

    Java笔记桌面程序

    通过这个Java笔记桌面程序,我们可以看到开发者如何运用自己的技术知识解决实际问题,这不仅是提升个人技能的一种方式,也是在IT行业中展示创造力和解决问题能力的良好实践。对于想要学习Java桌面应用开发的初学者来...

    java学习笔记markdown

    通过学习这份Markdown版的Java学习笔记,不仅可以掌握Java编程的基础,还能了解到一些高级话题,为成为熟练的Java开发者打下坚实基础。同时,Markdown格式使得笔记易于编辑和分享,是个人学习和团队协作的理想选择。

    java笔记java笔试题 java面试题

    这份"java笔记java笔试题 java面试题"的资源无疑是准备Java程序员的笔试和面试时的重要参考资料。以下是一些关键的Java知识点,这些内容可能会在笔记或面试中出现: 1. **Java基础**:Java的基础语法包括数据类型...

    java学习笔记.zip

    java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...

    尚硅谷JAVA基础笔记吐血整理

    “尚硅谷JAVA基础笔记”涵盖了Java语言的基础知识,包括语言概述、基本语法、面向对象概念、封装、继承和多态,以及一些关键概念如形参与实参、属性与局部变量、构造器、this关键字、包和MVC设计模式的使用。...

    狂神说java系列笔记(java基础+javaweb+ssm+微服务)全套

    【标题】:“狂神说java系列笔记”涵盖了Java的基础、Web开发、SSM框架以及微服务等关键领域,是一套全面深入的Java学习资源。它旨在帮助初学者和进阶者掌握Java编程语言的核心概念,以及在实际项目开发中的应用。 ...

    大佬的java笔记

    4. Java核心类库:Java的核心类库提供了丰富的API接口,从基本数据类型到集合框架、输入输出流、网络编程、多线程以及安全管理等,这些内容笔记中也可能有详尽的介绍。 5. 设计模式和架构:Java作为企业级应用开发...

    java学习笔记1

    Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。下面列举了一些...

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    java基础笔记整理java基础笔记整理.pdf

    java基础笔记整理java基础笔记整理

    李兴华java笔记

    通过对《李兴华Java实战经典笔记》的深入学习,读者不仅可以掌握Java编程的基础知识,还能了解到实际项目中的一些最佳实践,这对于成为一名合格的Java开发者来说是非常有益的。同时,结合实际编程练习,可以更好地...

    java全套笔记 来自狂神说java笔录.zip

    【Java编程语言基础】 Java是一种广泛使用的面向对象的编程...这些笔记内容全面覆盖了Java的基础和进阶知识,适合从零开始学习Java的人群,通过系统学习,可以建立起扎实的Java编程基础,为实战项目开发打下坚实基础。

    达内Java_笔记整理.rar_Java 达内笔记_Java笔记_java 笔记_笔记_达内

    最后,笔记可能还会提供一些实际项目案例,让学习者能够将理论知识应用到实践中,提升解决实际问题的能力。 总之,这份“达内Java_笔记整理.pdf”文件是学习Java的宝贵资源,涵盖了广泛的Java知识体系,无论你是...

Global site tag (gtag.js) - Google Analytics