java面向对象

1.1.
面向对象的特点
答:面向对象有三大特点:封装、继承、多态。(如果要回答四个,可加上 抽象性 这一特点)
1.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
2.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
3. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
4.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

1.2.
什么是多态?满足多态的条件及好处?
多态是同一个行为具有多个不同表现形式或形态的能力
继承
重写
父类引用指向子类对象
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

1.3.
写出程序结果

class Fu
{
	boolean show(char a)
	{
		System.out.println(a);
		return true;
	}
}
class Demo extends Fu
{
	public static void main(String[] args)
	{
		int i=0;
		Fu f=new Demo();
		Demo d=new Demo();
		for(f.show('A'); f.show('B')&&(i<2);f.show('C'))
		{
			i++;
			d.show('D');
		}	
	}
	boolean show(char a)
	{
		System.out.println(a);
		return false;
	}
}

A B
1.4.

interface Inter
{
	void show(int a,int b);
	void func();
}
class Demo
{
	public static void main(String[] args)
	{
		//补足代码;调用两个函数,要求用匿名内部类
		Inter in = new Inter()
		{
			public void show(int a,int b)
			{
			
			}
			public void func()
			{
			
			}
		};

		in.show(4,5);
		in.func();
		
	}
}

1.5.

写出程序结果:

class Fu
{
	int num=4;
	void show()
	{
		System.out.println("showFu");
	}
}
class Zi extends Fu
{
	int num=5;
	void show()
	{
		System.out.println("showZi");
	}
}
class T
{
	public static void main(String[] args)
	{
		Fu f=new Zi();
		Zi z=new Zi();
		System.out.println(f.num); 
		System.out.println(z.num); 
		f.show(); 
		z.show(); 	
	}
}

4
5
showZi
showZi
1.6.
写出程序结果

interface A{}  
class B implements A
{
	public String func()
	{
		return "func";
	}
}
class Demo
{
	public static void main(String[] args)
	{
		A a=new B();
		System.out.println(a.func());
	}
}

编译失败:因为A接口中并未定义func方法。
1.7.
写出程序结果

class TD
{
	int y=6;
	class Inner
	{
		static int y=3;  
		void show()
		{
			System.out.println(y);
		}
	}
}
class TC
{
	public static void main(String[] args)
	{
		TD.Inner ti=new TD().new Inner();
		ti.show();
	}
}

编译失败,非静态内部类中不可以定义静态成员。
内部类中如果定义了静态成员,该内部类必须被静态修饰。
1.8.

interface Test{
	void func();
}
class Demo{
	public static void main(String[] args){
		//补足代码;(匿名内部类)
		//new Demo().show(new Test(){
			public void func(){
			
			}
		});
		
	}
	void show(Test t){
		t.func();
	}
}

1.9.
写出程序结果

public class Demo
{     
	private static int j = 0; 
	private static boolean methodB(int k)
	{
		j += k; 
		return true; 
	}
	public static void methodA(int  i)
	{ 
        	boolean b;   
		b = i < 10 | methodB (4); 
		b = i < 10 || methodB (8); 
	}
	public static void main (String args[] )
	{
		methodA (0); 
		System.out.println(j); 
	} 
}

//4
1.10.
写出程序结果

class Super
{
	int i=0;	
	public Super(String s)
	{
		i=1;	
	}
}
class Demo extends Super
{
	public Demo(String s)
	{
		
		i=2;			
	}
	public static void main(String[] args)
	{
		Demo d=new Demo("yes");
		System.out.println(d.i);
	}
}

//编译失败,因为父类中缺少空参数的构造函数。
//或者子类应该通过super语句指定要调用的父类中的构造函数。
1.11.
写出程序结果

class Super
{
	public int get(){return 4;}
}
class Demo extends Super
{
	public long get(){return 5;}			
	public static void main(String[] args)
	{
		Super s=new Demo();
		System.out.println(s.get());
	}
}

编译失败,因为子类父类中的get方法没有覆盖。但是子类调用时候不能明确返回的值是什么类型。
所以这样的函数不可以存在子父类中。
1.12.

public class  FatherClass
{
    public FatherClass()
 {
  System.out.println("FatherClass Create");
 }
}
写出程序执行结果
public class  ChildClass extends FatherClass
{
 public ChildClass()
 {
  System.out.println("ChildClass Create");
 }
 public static void main(String[] args) 
 {
  FatherClass fc = new FatherClass();
  ChildClass cc = new ChildClass();
 }
}

输出结果为:
FatherClass Create
FatherClass Create
ChildClass Create
1.13.

public class OuterClass { 
  private double d1 = 1.0; 
    //insert code here 
} 

You need to insert an inner class declaration at line 3. Which two inner class declarations are
valid?(Choose two.)
A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}
说明如下:
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错
二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。
故 D 错
三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确
四.答案为C、E

1.14.
1.

public class Test {
2. int x= 12;
3. public void method(int x) {
4. x+=x;
5. System.out.println(x);
6. }
7. }

Given:
34. Test t = new Test();
35. t.method(5);
What is the output from line 5 of the Test class?
A. 5
B. 10
C. 12
D. 17
E. 24
B += 运算是左边+右边再赋给左边
1.15.
int 和 Integer 有什么区别
答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。
Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,
当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量
的缺省值与它们的类型有关.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值