There are no properties of an object that makes one float and another not. Whether something floats or not is determined by comparing its weight in air to the weight of the water it displaces. If the displaced water weighs more, the object floats.
The water that would fill the boat shaped hole in the water weighs more than the boat itself. That displaced water was raised up above its normal resting place and let's say all that raised water weighs 1000#. Let's say the boat weighs 600#. 1000 pounds of elevated water wants to fall back down, and level itself, ejecting that boat (no matter how it's shaped). So there's a 1000 pounds pushing up against the boat, and 600 pounds of boat pushing down. The boat loses the battle and floats.
Let's say a bowling ball could be filled with 1 gallon of water if it were hollow, but the ball is normal, and weighs 15 pounds. When you put the ball in water and 8.3# (1 gallon) of water is raised in the lake, ocean, or bucket. But the ball outweighs the displaced water by 6.7#, and still sinks leaving the water raised. (The ball would weigh 6.7# underwater because the force of 8.3# water would push upwards offsetting the downward force of 15#.)
Because water expands when frozen, ice takes up more space than the water it consists of takes up. Therefore the water displaced by the ice weighs more than the ice, and the ice floats.
As you see, the reason anything floats is ultimately gravity. The gravity of the displaced fluid trying to fall back down and reclaim its original space. There is no such thing as "buoyancy", even though I've heard MIT professors use the term.